可能重复:
通过指针传递二维数组
int table[20][20];
int** table1 = table;
int a;
table[0][0] = 4;
a = table1[0][0];
Run Code Online (Sandbox Code Playgroud)
最后一行给了我访问冲突,我不明白..
提前致谢!
你不能在一个赋值中从二维int数组中创建一个int**.首先,您需要分配正确数量的指针:table1 = malloc(sizeof(int*)*20);
然后你可以使用循环来填充你的下一级指针:
for(int i = 0; i < 20; i++)
table1[i] = table[i];
Run Code Online (Sandbox Code Playgroud)
原因是指向指针的指针是一个保存地址的内存位置.进行第一次分配时,会使该指针指向20个int指针.然后,我们为每个指针分配原始表中每行的第一个地址.现在,当我们使用时a = table1[0][0]
,编译器将获取table1 [0] - 所以我们在循环中设置的数组中的第一个指针.这指向table [0]行,所以我们从中获取[0]元素,并获取那里填充的4 [当然,任何其他数字索引也会得到4,所以很难证明它有效在这种情况下).
在这种table[y][x]
情况下,编译器将获取表的地址,向其添加y*20*sizeof(int),然后添加x*sizeof(int).这给了我们一个很好的位置,在"正方形"的内存块"桌子".
(再次,输入太多,自我开始写这个以来又有两个答案)
归档时间: |
|
查看次数: |
296 次 |
最近记录: |