3.8 数组类型
This content is not available in your language yet.
数组(Array)是一种复合类型,它可以在连续的内存空间中存储相同类型的多个元素。
数组的声明与初始化
Section titled “数组的声明与初始化”声明数组时,需要指定元素的类型和数组的大小。数组的大小必须是一个常量表达式,读者目前可以把它理解为一个整数字面量。
// 声明一个包含 5 个整数的数组,这个数组的类型是 int[5]int numbers[5];需要注意,数组类型是一个复合类型,它的大小是由元素类型和数组大小共同决定的。
这里 int numbers[5]; 的类型是 int[5],其中的 5 是数组的大小。
数组可以在声明时进行初始化:
// 声明并初始化数组int numbers[5] {10, 20, 30, 40, 50};// 现在 `numbers` 包含 5 个整数,按顺序依次是 10, 20, 30, 40, 50或者,可以只初始化部分元素,未初始化的元素将被初始化为 0:
// 只初始化前两个元素,其他元素将被初始化为 0int numbers[5] {10, 20};此外,C++ 支持通过初始化器的长度来推断数组的大小:
// 数组大小自动推断为 5,注意这里 numbers 的类型是 `int[5]` 而不是 `int[]`int numbers[] {10, 20, 30, 40, 50};访问数组元素
Section titled “访问数组元素”可以通过索引操作符/下标操作符[]来访问数组中的元素,这是一种独特的后缀表达式。数组的索引从 0 开始。
int numbers[5] = {10, 20, 30, 40, 50};
int first_element = numbers[0]; // 访问第一个元素,值为 10int third_element = numbers[2]; // 访问第三个元素,值为 30
numbers[4] = 55; // 修改第五个元素的值访问超出数组边界的元素会导致未定义行为。
引用可以绑定到数组,如下所示:
int numbers[5] = {10, 20, 30, 40, 50};auto& ref = numbers; // ref 是一个对数组的引用
ref[0] = 100; // 修改数组的第一个元素这里 ref 是一个对数组 numbers 的引用,可以通过 ref 来访问和修改数组的元素。
你可以在 C++ 中声明多维数组,实际上这就是数组的数组,是数组的简单嵌套形式。
// 声明一个 2x3 的二维整数数组int matrix1[3][2];
// 初始化一个 3x2 的二维数组,这里使用嵌套的初始化器int matrix2[3][2] = { {1, 0}, {0, 1}, {0, 0}};
// 访问二维数组的元素int element = matrix2[1][1]; // 访问第二行第二列的元素,值为 1读者可以尝试通过 auto& 和代码编辑器的类型提示功能来查看多维数组的类型,如下:
auto& matrix2_ref = matrix2; // matrix2_ref 的类型是 int (&)[3][2]auto& row_ref = matrix2[1]; // row_ref 的类型是 int (&)[2]可以发现,matrix2 的类型其实是 int[2] 类型的、大小为 3 的数组。即 int[3][2] 实际外层的数组的大小是 3,内层数组的大小是 2。在需要处理数组大小的时候,需要尤其注意这一点。