【发布时间】:2012-10-07 06:37:07
【问题描述】:
这里有两种我知道的动态分配多维数组的方法:
int (*numbers)[4] = new int[3][4]
和
int **numbers = new int*[3];
这两个在内存中代表相同的东西吗?实际上,它们代表什么以及如何代表? (内存图真的很有帮助!)
【问题讨论】:
标签: c++ dynamic multidimensional-array
这里有两种我知道的动态分配多维数组的方法:
int (*numbers)[4] = new int[3][4]
和
int **numbers = new int*[3];
这两个在内存中代表相同的东西吗?实际上,它们代表什么以及如何代表? (内存图真的很有帮助!)
【问题讨论】:
标签: c++ dynamic multidimensional-array
不,第一个将创建 12 个整数 (3*4),在内存中它们将按顺序排列。第二个创建 3 个指向整数的指针
即第一个将像这样布置
[1,2,3,4][5,6,7,8][9,10,11,12]
所以你有 3 个 4 元素的整数数组,而第二个例子看起来更像
[0x12345678,0x12345678,0x12345678]
即,3个未初始化的整数指针
【讨论】:
numbers 是一个指向4 个整数数组的指针。第二个numbers 是一个指向整数的指针。
numbers 的值是第一个 4 个整数数组的第一个元素的内存地址。对于第二个numbers,numbers 的值是你的 3 指针数组中第一个指针的内存地址。