C++数组初始化

C++ array initialisation

本文关键字:初始化 数组 C++      更新时间:2023-10-16

我在C++中学习多维数组,在书中有一个例子:

int (*b)[2] = new int[1][2];

请解释为什么使用这种符号,而不是标准

int b[1][2];

总的来说,它们之间有什么区别吗?谢谢。

int

*b[2] 是 2 个指针的数组

int (*b)[2] 是指向大小为 2 的数组的指针。

[] 的优先级高于 *。

int (*b)[2]

这意味着行是可扩展的(或者它们是动态的),因为它是指向 2 的数组的指针。 而列是静态分配的。

int b[1][2]

您正在静态分配内存,这不能是动态的。

第一个选项:

int (*b)[2] = new int[1][2];
  • b 是指向 array[2] int 的指针,并动态分配给堆中的 2D 数组。参考此内容以研究堆栈与堆。
  • 因为在这种情况下b是一个指针,所以它可以重新分配给任何其他具有相同大小的 2D 数组,即 int [1][2] - 无论该数组是否在堆堆栈中。

第二种选择:

int b[1][2];
  • b是一个 2D 数组(尽管在内存中它看起来与 1D 数组相同,因为只有一行)。如评论中所述,b是堆栈/自动变量。
  • 另外b这里有一个数组,这意味着您无法将其重新分配给点到其他任何东西。