1、定义数组的时候必须指定数组的类型,不允许用auto关键字由初始值的列表推断类型。
2、字符数组的特殊性:
字符数组有一种额外的初始化形式,我们可以用字符串字面值对此类数组初始化。当使用这种形式时,一定注意字符串字面值的结尾处还有一个空字符。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14例子:char a1[] = {‘C’,‘+’,‘+’}; //列表初始化,没有空字符 a1的维度是3 char a2[] = {'C','+','+',''}; //列表初始化,含有显示的空字符 a2的维度是4 char a3[] = "C++"; //自动添加表示字符串结束的空字符 a3的维度是4 const char a4[6] = "Daniel"; //错误:没有空间可存放空字符 a4是错误的,尽管字符串字面值“Daniel”看起来只有6个字符,但是数组的大小必须至少是7
3、数组阅读的方法:
由于数组的维度是紧跟被命名的名字的,所以就数组而言,阅读的方法由内向外阅读要比从右向左好。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13例子1:试着用由内向外阅读的方式分析下面的语句: int (*Parray) [10] = &arr; 分析:首先是圆括号括起来的部分,*Parray意味着Parray是个指针,接下来观察右边,可知道Parray是个指向大小为10的数组的指针,最后观察左边,知道数组中包含10个元素。Parray是一个指针,它指向一个int数组,数组中包含10个元素。 例子2: int (&arrRef)[10] = arr; 分析:(&arrRef)表示arrRef是一个引用,它引用的对象是一个大小为10的数组,数组元素的类型是int 例子3: int *(&arry)[10]=ptrs; //arry是数组的引用,该数组含有10个指针。 分析:按照由内向外的顺序阅读,首先知道arry 是一个引用,然后观察右边知道,arry引用的对象是一个大小为10的数组,最后观察左边知道,数组的元素类型是指向int的指针。所以arry就是一个含有10个int型指针的数组的引用。
4、数组的知识点整理:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19理解复杂数组的声明(难点) 理解方法:从数组的名字开始,由内向外顺序读取,先左后右,左边为类型。 不可以将数组的内容拷贝给其他数组当作初始值,也不能用数组为其他数组赋值。 int a[3] = {0,1,3}; int a1[] = a; //错误 a2 = a; //错误 复杂数组声明的理解 int *a[10]; //a数组含有10个指针整形 int &a[10]; //错误,不存在引用的数组 int (*a)[10]; //a是一个指针,指向一个含有10个整数的数组 int (&a)[10]; //a是一个引用,引用一个含有10个整数的数组 int *(&a)[10]; // a是数组的引用,数组含有十个指针
5、习题:下列数组中元素的值是什么?
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15string sa [10]; int ia [10]; int main() { string sa2[10]; int ia2[10]; } 解析:string不是内置的数据类型,int是内置的数据类型。 sa数组为空。 ia数组含有10个整数,皆为0。 sa2数组为空。 ia2数组含有10个整数,在函数体内,值不确定。
6、相比于vector来说,数组有哪些缺点?
复制代码
1
2
3解析: 数组的缺点:数组的大小是确定不变的,不可以向数组中添加元素,丧失了vectoer的灵活性。
7、编写一段程序,定义一个含有10个int 的数组,令每个元素的值就是其下标。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#include <iostream> #include <string> #include <vector> using namespace std; int main() { int a[10] = { 0,1,2,3,4,5,6,7,8,9 }; for (int i = 0; i < 10; i++) { cout << "a[" << i << "]" << " = " << a[i] << endl; } } 注意点:下标要从0开始。
8、将7题中刚刚建立的数组拷贝给另外一个数组。利用vector重写程序,实现类似功能。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#include <iostream> #include <string> #include <vector> using namespace std; int main() { int a[10] = { 0,1,2,3,4,5,6,7,8,9 }; int b[10]; for (int i = 0; i < 10; i++) { cout << "a[" << i << "]" << " = " << a[i] << endl; b[i] = a[i]; cout << "b[" << i << "]" << " = " << b[i] << endl; } } 解析:知识点为(1)关于数组的拷贝,不可以将整个数组赋值给另一个数组,只能逐个元素的拷贝;(2)如果利用vector,可以直接将整个vector拷贝给另一个vector。
vector:重新写程序,
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#include <iostream> #include <string> #include <vector> using namespace std; int main() { int a[10] = { 0,1,2,3,4,5,6,7,8,9 }; vector<int> v1(a, a + 10);//vector的赋值并不可以像数组一样方便的用花括号方便的赋值,这里借用了数组来初始化这个vector vector<int> v2 = v1; int b[10]; for (int i = 0; i < 10; i++) { cout << "a[" << i << "]" << " = " << a[i] << endl; b[i] = a[i]; cout << "b[" << i << "]" << " = " << b[i] << endl; cout << "v1[" << i << "]" << " = " << v1[i] << endl; cout << "v2[" << i << "]" << " = " << v2[i] << endl; } }
最后
以上就是寒冷狗最近收集整理的关于第三章:数组知识点和习题答案以及学习感受的全部内容,更多相关第三章内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复