根据我的书,创建多维数组char a[10][10]时,它说您必须使用类似于char a[][10]的参数才能将数组传递给函数。

为什么必须这样指定长度?您不只是传递一个双指针指向with,并且那个双指针是否已经指向已分配的内存?那么,为什么参数不能是char **a呢?您是否要通过提供第二个10重新分配任何新的内存?

最佳答案

指针不是数组

取消引用的char **char *类型的对象。

取消引用的char (*)[10]char [10]类型的对象。

数组不是指针

参见c-faq entry about this very subject

假设你有

char **pp;
char (*pa)[10];

并且,为了论证,它们都指向同一位置:0x420000。
pp == 0x420000; /* true */
(pp + 1) == 0x420000 + sizeof(char*); /* true */

pa == 0x420000; /* true */
(pa + 1) == 0x420000 + sizeof(char[10]); /* true */

(pp + 1) != (pa + 1) /* true (very very likely true) */

这就是为什么参数不能为char**类型的原因。另外char**char (*)[10]是不兼容的类型,因此参数的类型(衰减的数组)必须与参数(函数原型(prototype)中的类型)匹配

关于c - 多维数组和指针的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5558382/

10-14 14:26
查看更多