根据我的书,创建多维数组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/