C ++数组初始化

时间:2017-01-15 05:05:08

标签: c++ arrays

我在C ++中学习多维数组,在本书中有以下示例:

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

请解释为什么使用这种表示法而不是标准

int b[1][2];

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

2 个答案:

答案 0 :(得分:-1)

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

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

[]的优先级高于*。

int (*b)[2]

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

int b[1][2]

你是静态分配内存,但这不是动态的。

答案 1 :(得分:-2)

第一个选项:

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

第二个选项:

int b[1][2];
  • b是一个2D数组(虽然在内存中它看起来与1D数组相同,因为只有一行)。正如评论中所提到的,b是堆栈/自动变量。
  • 此处b此处是一个数组,表示您无法将其重新指定为点 其他任何事情。