c - 为什么传递给函数的二维数组需要它的大小?

标签 c arrays pointers multidimensional-array

灵感 this提问。

为什么 -

void display(int p[][SIZE]) // allowed

void display(int p[][]) // not allowed

?

最佳答案

因为当传递给函数时,数组衰减 为指针。如果您不提供数组第二维的基数,编译器将不知道如何取消引用该指针。

这里有一个更长的解释:当你写这篇文章的时候

p[index]

编译器执行一些指针运算来找到它需要引用的元素的地址:它将 index 乘以 p 的元素的大小,然后加上它到p的基地址:

address = <base address of p> + index * <size of p's element>

当您尝试传递这样的数组 p[][] 时,编译器只知道 p 的基地址,但不知道其元素的大小。为了让编译器知道 p 元素的大小,您需要提供第二维的基数。

关于c - 为什么传递给函数的二维数组需要它的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20523665/

相关文章:

c - 从 FTP 服务器上的文件获取特定数据 block

c# - 数组包含性能

使用 malloc 连接字符串

c++ - 如何指向具有函数重载的函数?

javascript - 在 JavaScript 中创建数组并用索引加一填充

C++ 指针 "error: double free or corruption (out)"

c - 断开连接的 udp 套接字是否仍会从另一个套接字连接的端口接收流量?

为我的结构的 char 成员赋值时出现 C 段错误

c - 如何使用 SQLite 从内存中打开数据库?

arrays - 在 MATLAB 中将不规则大小的元胞数组归零