数组是一直类似于标准库类型vector的数据结构,与vector相同点为都是存放类型相同的数据类型的容器(如果不清楚对象个数,请用vector).这些对象本身没有名字,要通过数组名和所在位置访问.与vector不同点为数组大小固定不能随意添加元素.
1.定义和初始化数组
数组是一种复合类型,如a[b],表示一个数组,a—数组名,b—维度,维度说明元素个数,所以维度必须大于0.并且维度必须为已知的.
int a[10]; //数组名为a,里面含有10个int型数据,用a[0]到a[9]访问.
int *p[10]; //含有10个整形指针的数组.
1.可以对数组的元素进行列表初始化,这种情况可以忽略维度,维度由初始值数量计算出来.如果指明维度,初始值数量不要超过维度大小,如果维度大于初始值数量,则用初始值初始化靠前的元素,剩下的元素使用默认值.
2.字符数组还可以用字符串字面值初始化,但是要注意字符串后面的空字符.
3.不能用数组为其他数组赋值,也不能用数组作为其他数组的初始值.
4.默认情况下,类型修饰符从右至左依次绑定.
int a1[3] = {1,2,3}; //含有三个元素1,2,3
int a2[] = {1,2,3}; //含有三个元素1,2,3
int a3[5] = {1,2,3}; //相当于a3[5] = {1,2,3,0,0};
string a4[3] = {"hi","bye"}; //相当于a4[3] = {"hi","bye",""};
int a5[3] = {1,2,3,4}; //错误:初始值过多
char c1[] = {'c','+','+'}; //三个元素
char c2[] = {'c','+','+','\0'}; //四个元素
char c3[] = "c++"; //四个元素,自动添加空字符
char c4[3] = "c++"; //错误,初始值数量大于维度
int a6[] = a2; //错误
a6 = a2; //错误
int *a7[10]; //a7是含有10个整型指针的数组
2.访问数组元素
通常数组使用范围for语句和下标运算符访问,索引从0开始,一个含有10个元素的数组下标为0到9.
int a[5] = {1,2,3,4,5}; //定义一个数组
cout << a[1] <<endl; //使用下表访问
for(auto i : a) //使用for范围访问
cout << i << endl;
3.指针和数组
1.使用数组的时候,编译器一般会把数组转化为指针.
2.指针也是迭代器,数组的指针支持vector和string迭代器的所以运算.如:使用指针自加运算使指针指向下一个元素.
string nums[] = {"one","two","three"};
string *p = &nums[0]; //指向nums[0]
string *p2 = nums //指向数组,即数组首元素