和vector一样,数组的元素应为对象,因此不存在引用的数组。
一、定义和初始化数组
1、数组是一种复合类型。数组的声明形如a[d],其中a是数组的名字,d是数组的维度,维度说明了数组中元素的个数。编译的时候维度应该是已知的,因此维度必须是一个常量表达式。
2、默认情况下,数组的元素被默认初始化。和内置类型的变量一样,如果在函数内部定义了某种内置类型的数组,那么默认初始化会令数组含有未定义的值。
3、显示初始化数组元素
可以对数组的元素进行列表初始化,此时允许忽略数组的维度。如果在声明时没有指明维度,编译器会根据初始值的数量计算并推测出来;相反,如果指明了维度,那么初始值的总数量不应超出指定的大小。如果维度比提供的初始值数量大,则用提供的初始值初始化靠前大的元素,剩下的元素执行值初始化。
1 int main() 2 { 3 const unsigned sz = 3; 4 int a1[sz] = { 0, 1, 2 }; // 含有3个元素的数组,元素值分别是0,1,2 5 int a2[] = { 0, 1, 2 }; // 维度是3的数组,元素值分别是0,1,2 6 int a3[5] = { 0, 1, 2 }; // 维度是5的数组,元素值分别是0,1,2,0,0 7 string a4[3] = { "hi", "bye" }; // 等价于a4[] = {"hi","bye",""} 8 return 0; 9 }
4、字符数组的特殊性
字符数组有一种额外的初始化形式,我们可以用字符串字面值对此类数组进行初始化。当使用这种方式时,一定要注意字符串字面值的结尾处还有一个空字符,这个空字符也会像字符串的其他字符一样被拷贝到字符数组中去。
1 int main() 2 { 3 4 char a1[] = { 'c', '+', '+' }; // 列表初始化,没有空字符 5 char a2[] = { 'c', '+', '+', '