当你创建多维数组 char a[10][10]
时,根据我的书它说你必须使用类似于 char a[][10] 的参数
将数组传递给函数。
为什么必须这样指定长度?你不是只是传递一个双指针到 being 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/