【发布时间】:2019-10-12 09:59:39
【问题描述】:
代码如下:
#include <iostream>
using std::cout;
int main(int argc, char ** argv)
{
int** p;
int a[2][3]={{-1,-1,-1},
{-1,-1,-1}};
int k=1;
p = new int *[2];
for(int i=0;i<2;i++) {
p[i] = new int[3];
for(int j=0;j<3;j++) {
p[i][j] = k++;
}
}
memcpy(a,p,2 * 3 * sizeof(int));
for(int i=0;i<2;i++){
for(int j=0;j<3;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
delete [] p;
return 0;
}
运行后得到了意想不到的结果:
26573888 0 26573920
0 0 0
我认为它复制了地址而不是值,所以我将 memcpy(a,p,2 * 3 * sizeof(int)); 行更改为
memcpy(a,p[0],2 * 3 * sizeof(int));
终端打印出来:
1 2 3
0 0 0
如何理解上述结果?谁能帮帮我?
猜猜p[0][2]和p[1][0]的地址不连续?
【问题讨论】:
-
您想要实现的实际目标是什么?您想将静态数组复制到动态数组吗?或者你只是想了解内存布局?你的代码的目的是什么?
-
撤回近距离投票:可能的重复只关注多维数组,而没有充分说明指针数组的差异(这些在内存中是如何布局的?)。
标签: c++ multidimensional-array memory-management