将[] []放入**

gal*_*gal 3 c c++

可能重复:
通过指针传递二维数组

int table[20][20];
int** table1 = table;
int a;
table[0][0] = 4;
a = table1[0][0];
Run Code Online (Sandbox Code Playgroud)

最后一行给了我访问冲突,我不明白..

提前致谢!

Som*_*ude 13

简短的回答是指向指针的指针与数组数组不同.

  • @gal:你错了.他们绝对没有任何共同之处.阅读我在问题评论中提供的链接中的解释. (2认同)

Mat*_*son 5

你不能在一个赋值中从二维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).这给了我们一个很好的位置,在"正方形"的内存块"桌子".

(再次,输入太多,自我开始写这个以来又有两个答案)