c - 多维数组和指向指针的指针

标签 c arrays pointers pointer-to-pointer

当你创建多​​维数组 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/

相关文章:

c - 是否有任何加扰单词的算法?

c - 没有编译错误,但给定输入时崩溃

c - 在c中将ByteArray写入文件

指针可以存储值吗?void 指针有什么用?

pointers - 在 Go 函数中通过引用和值传递

c++ - 加载的共享库中的类冲突

c - 我正在尝试利用缓冲区溢出,我做错了什么吗?

c - 指针的循环反转,最后一个字符?

php - 如何检查多维数组中的所有值是否为空

javascript - Mongodb 对每个文档数组中的所有相同字段求和 - Map-Reduce