如何在C中动态分配数组

新手上路,请多包涵

我知道如何在 C 中为数组动态分配空间。可以按如下方式完成:

 L = (int*)malloc(mid*sizeof(int));

并且可以通过以下方式释放内存:

 free(L);

如何在 C++ 中实现等价物?

具体来说,如何使用 newdelete[] 关键字?尤其是在创建/销毁链表节点,或创建和销毁其大小由编译时变量给出的数组的上下文中?

原文由 thematroids 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 452
1 个回答

以下信息将很有用:来源: 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

原文由 vikum sri wijesinghe 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题