低级符合类型:数组、指针
数组的长度是固定的。数据一经创建,就不允许添加新的元素。指针可以向迭代器一样便利和检查数组中的元素。现在C++程序应尽量使用vector和迭代器类型,而避免使用低级的数组和指针。与使用标准的vector类型的程序相比,依赖于内置数组的程序更容易出错而且难于调试。
注意:数组定义中的类型名可以是内置数据类型或类类型;除引用之外,数组元素的类型还可以是任意的符合类型。没有所有元素都是引用的数组。
1.数组的定义和初始化
数组的维数必须要用大于等于1的常量表达式定义。此常量表达式只能包含整形字面值常量,枚举常量或者用常量表达式初始化的const对象,非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数。
(1)显式初始化数组元素
const unsigned size = 3;
int arr[size] = {0,1,2};
如果没有显式提供元素初值,则数组元素会像普通变量一样初始化。
在函数体外定义的内置数组,其元素均初始化为0;
在函数体内定义的内置数组,其元素无初始化;
不管数组在哪里定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化;如果该类没有默认构造函数,则必须为该数组的元素提供显式初始化。
显示初始化的数组不需要指定数组的维数值,编译器会根据列出的元素个数来确定数组的长度:
int ia[] = {0,1,2};//数组长度为3
如果指定了数组的长度,那么初始化列表提供的哦元素个数不能超过数组维数值。
(2)特殊的字符数组
char ca1[] = {'c','+','+'}; //维数是3
char ca2[] = {'c','+','+','\0'}; //维数是4
char ca3[] = "c++"; //维数是4
(3)不允许数组直接复制和赋值
与vector不同,一个数组不能用另外一个数组初始化,也不能将一个数组赋值给另一个数组,这些操作都是非法的。
(4)数组的操作
数组可以用下标符来访问,数组元素也是从0开始计数。对于一个包含10个元素的数组,正确的下标值是从0到9,而不是1到10
数组下标的类型是size_t。
const size_t array_size = 10;
int ia[array_size];
for(size_t ix = 0;ix!=array_size;++ix)
ia[ix] = ix;