以下信息将很有用:
来源:https://www.learncpp.com/cpp-tutorial/6-9a-dynamically-allocating-arrays/
初始化动态分配的数组
如果要将动态分配的数组初始化为0,语法很简单:
int *array = new int[length]();
在 C++11 之前,没有简单的方法将动态数组初始化为非零值(初始化列表仅适用于固定数组)。这意味着您必须循环遍历数组并显式分配元素值。
int *array = new int[5];
array[0] = 9;
array[1] = 7;
array[2] = 5;
array[3] = 3;
array[4] = 1;
超级烦人!
不过,从 C++11 开始,现在可以使用初始化列表来初始化动态数组!
int fixedArray[5] = { 9, 7, 5, 3, 1 }; // initialize a fixed array in C++03
int *array = new int[5] { 9, 7, 5, 3, 1 }; // initialize a dynamic array in C++11
请注意,此语法在数组长度和初始化列表之间没有 operator=。
为了一致性,在 C++11 中,固定数组也可以使用统一初始化进行初始化:
int fixedArray[5] { 9, 7, 5, 3, 1 }; // initialize a fixed array in C++11
char fixedArray[14] { "Hello, world!" }; // initialize a fixed array in C++11
需要注意的是,在 C++11 中,您不能从 C 风格的字符串初始化动态分配的 char 数组:
char *array = new char[14] { "Hello, world!" }; // doesn't work in C++11
如果您需要这样做,请改为动态分配 std::string(或分配您的 char 数组,然后将字符串 strcpy 放入)。
还要注意动态数组必须用明确的长度声明:
int fixedArray[] {1, 2, 3}; // okay: implicit array size for fixed arrays
int *dynamicArray1 = new int[] {1, 2, 3}; // not okay: implicit size for dynamic arrays
int *dynamicArray2 = new int[3] {1, 2, 3}; // okay: explicit size for dynamic arrays