多维数组和指针指针

rub*_*buc 6 c arrays pointers pointer-to-pointer

当你创建多​​维数组时char a[10][10],根据我的书,它说你必须使用类似的参数char a[][10]将数组传递给一个函数.

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

pmg*_*pmg 13

指针不是数组

解除引用char **是类型的对象char *.

解除引用char (*)[10]是类型的对象char [10].

数组不是指针

有关此主题,请参阅c-faq条目.


假设你有

char **pp;
char (*pa)[10];
Run Code Online (Sandbox Code Playgroud)

并且,为了争论,两者都指向同一个地方: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) */
Run Code Online (Sandbox Code Playgroud)

这就是为什么论证不能是类型的原因char**.也char**char (*)[10]不兼容的类型,所以参数的类型(腐烂阵列)必须的参数的类型(在函数原型)匹配