C++数组:一维、二维、多维数组的运用
一. 数组的定义
1. 一维数组
语法:type arrayName[size];
其中type是数组元素的类型,如int、double、char等;arrayName是数组的名称,由程序员自行命名;size是数组的大小,它必须是一个常量表达式,表示数组中元素的个数。
int numbers[5]; // 定义一个包含5个整数元素的数组 char characters[10]; // 定义一个包含10个字符元素的数组
2. 初始化
在定义数组时可以进行初始化。完全初始化时,需要提供与数组大小相同数量的初始值。
int numbers1[3] = {1, 2, 3};
部分初始化时,未初始化的元素会被自动初始化为默认值(对于基本类型,如int为0,char为'\0'等)。
int numbers2[5] = {1, 2}; // 后面三个元素初始化为0
不指定数组大小的初始化(C++11及以上)
在初始化数组时提供了初始值列表,可以省略数组大小,编译器会根据初始值的数量自动确定数组大小。
int numbers3[] = {1, 2, 3, 4}; // 数组大小为4
二. 数组的运用
1. 元素访问
通过索引(下标)来访问数组元素,索引从0开始,最大索引为size - 1。
int numbers[5] = {1, 2, 3, 4, 5}; std::cout << numbers[2] << std::endl; // 输出3
数组越界问题,如果访问的索引超出合法范围,会导致未定义行为,可能会使程序崩溃或产生错误结果。
2. 数组遍历
可以使用for循环来遍历数组元素。
int numbers[5] = {1, 2, 3, 4, 5}; for (int i = 0; i < 5; i++) { std::cout << numbers[i] << " "; } std::cout << std::endl;
在C++11及以上版本中,还可以使用基于范围的for循环,它更加简洁。
int numbers[5] = {1, 2, 3, 4, 5}; for (int num : numbers) { std::cout << num << " "; } std::cout << std::endl;
3. 作为函数参数
数组作为函数参数时,通常会传递数组名和数组大小。
void printArray(int arr[], int size) { for (int i = 0; i < size; i++) { std::cout << arr[i] << " "; } std::cout << std::endl; } int main() { int numbers[5] = {1, 2, 3, 4, 5}; printArray(numbers, 5); return 0; }
三. 多维数组
1. 二维数组
定义语法:type arrayName[size1][size2];
其中size1表示第一维(通常理解为行数)的大小,size2表示第二维(通常理解为列数)的大小。
int matrix[3][4]; // 定义一个3行4列的二维整数数组
2. 初始化:可以按行进行初始化。
int matrix1[2][3] = { {1, 2, 3}, {4, 5, 6} };
也可以不按行初始化,但要注意元素的顺序。
int matrix2[2][3] = {1, 2, 3, 4, 5, 6};
3. 二维数组的访问与遍历
访问二维数组元素需要使用两个索引,分别对应行和列。
int matrix[2][3] = { {1, 2, 3}, {4, 5, 6} }; std::cout << matrix[1][2] << std::endl; // 输出6
遍历二维数组通常使用嵌套的for循环。
for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { std::cout << matrix[i][j] << " "; } std::cout << std::endl; }
4. 更高维数组(如三维数组)
定义语法:type arrayName[size1][size2][size3];
int cube[2][3][4]; // 定义一个三维数组
初始化和访问方式与二维数组类似,需要更多的索引来定位元素,通常使用多层嵌套的for循环来遍历。
int cube[2][3][4]; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 4; k++) { cube[i][j][k] = i * j * k; } } } for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 4; k++) { std::cout << cube[i][j][k] << " "; } std::cout << std::endl; } std::cout << std::endl; }