我在C ++中学习多维数组,在本书中有以下示例:
int (*b)[2] = new int[1][2];
请解释为什么使用这种表示法而不是标准
int b[1][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
此处是一个数组,表示您无法将其重新指定为点
其他任何事情。