在 C++ 中,数组的初始化方式会根据数组维度(一维或多维)有所不同。以下是详细的初始化方法及示例:
一、一维数组初始化
1. 静态初始化(声明时直接赋值)
cpp
// 完全初始化 int arr1[5] = {1, 2, 3, 4, 5}; // 部分初始化(剩余元素自动填充为 0) int arr2[5] = {1, 2}; // [1, 2, 0, 0, 0] // 自动推断数组长度 int arr3[] = {1, 2, 3}; // 编译器自动推断长度为 3
2. 字符数组的特殊初始化
cpp
// 用字符串字面量初始化(自动添加 '\0') char str1[] = "Hello"; // 长度 = 6('H','e','l','l','o','\0') // 显式初始化字符数组 char str2[5] = {'H', 'e', 'l', 'l', 'o'}; // 注意:没有 '\0'
3. 统一初始化(C++11 及以后)
cpp
int arr4[] {10, 20, 30}; // 省略等号
二、多维数组初始化
多维数组可以视为“数组的数组”。常用初始化方式如下:
1. 完全显式初始化
cpp
int matrix1[2][3] = { {1, 2, 3}, // 第一行 {4, 5, 6} // 第二行 };
2. 部分初始化
未显式初始化的元素会被自动填充为 0
:
cpp
int matrix2[2][3] = { {1}, // 第一行:[1, 0, 0] {2, 3} // 第二行:[2, 3, 0] };
3. 省略第一维长度
编译器可以自动推断第一维的长度:
cpp
int matrix3[][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} // 第一维长度 = 3 };
4. 扁平化初始化(按内存顺序填充)
cpp
int matrix4[2][3] = {1, 2, 3, 4, 5, 6}; // 等价于 {{1,2,3}, {4,5,6}}
5. 统一初始化(C++11)
cpp
int matrix5[][3] { {10, 20}, {30, 40, 50} };
三、注意事项
-
元素默认值:未显式初始化的元素会被零初始化(数值类型为
0
,指针为nullptr
)。 -
维度限制:只有第一维的长度可以省略,其他维度必须显式指定。
-
动态数组:动态分配的数组(如
new int[n]
)无法直接初始化,需手动赋值。
示例代码
cpp
#include <iostream> using namespace std; int main() { // 一维数组 int arr[] = {1, 2, 3}; cout << arr[0] << endl; // 输出 1 // 二维数组 int matrix[][2] = {{1, 2}, {3, 4}, {5, 6}}; cout << matrix[2][1] << endl; // 输出 6 return 0; }
通过合理选择初始化方式,可以高效地管理数组的初始值,避免冗余代码。