c语言二维数组做形参的疑惑

来源:百度知道 编辑:UC知道 时间:2024/06/23 23:54:17
请问:
void function(int a[N][N])

void function(int(*p)[N])
是否等价?
如果不等价,还请告诉我哪个是对的,或者它们的区别。
谢谢了。

是等价的

很多人以为“指向数组的指针”就是“指向指针的指针”,于是有人写这样的代码:
int a[3][4];
int **p = a;//错误
这个代码的错误之处在于a是一个数组,它的成员也是数组,所以a叫做“数组的数组”——C中严格说来没有二维数组。那么,你要用一个指针来记录a,就要用一个能表示“数组的数组”的指针,以下代码是正确的:
int (*p)[4] = a;//正确
只有这样才能保证++p使p指向a的下一对像(该对像是一个数组)。
顺便提一句:不要写成“int *p[4];”