URL*_*L87 3 c arrays pointers multidimensional-array
启发了这种静止.
为什么 -
void display(int p[][SIZE]) // allowed
Run Code Online (Sandbox Code Playgroud)
和
void display(int p[][]) // not allowed
Run Code Online (Sandbox Code Playgroud)
?
因为数组在传递给函数时会衰减为指针.如果您不提供数组第二维的基数,编译器将不知道如何取消引用此指针.
这是一个更长的解释:当你写这个
p[index]
Run Code Online (Sandbox Code Playgroud)
编译器执行一些指针算法来查找它需要引用的元素的地址:它乘以's元素index的大小p,并将其添加到以下的基址p:
address = <base address of p> + index * <size of p's element>
Run Code Online (Sandbox Code Playgroud)
当您尝试传递这样的数组时p[][],编译器只知道其基本地址p,但不知道其元素的大小.这是为了让编译器知道p你需要提供第二维基数的元素的大小.