将二维数组作为参数的函数,数组名被视为地址,所以形参就应该是一个指针。
sum(int arr[][4],int size);
sum(int (*arr)[4],int size);
以上这两种表示方式是相同的
int *arr[4]
表示的是由4个指向int的指针组成的数组,而不是由一个指向4个int组成的数组的指针。因此括号是很必要的。
同样我们能看出,arr都是指针而非数组,是由4个int组成的数组。
函数参数中的指针类型指定了数组的列数,因此sum()函数只能接受由4列组成的数组,但是长度却是任意的。
因此在传递参数时候,如下形式是非法的:
sum(int (*arr)[4],int size);
同样的,如下形式是等价的
arr[r][c] = * ( *(arr+r)+c)
最后,在函数声明形参arr时不能用const关键字,因为arr是指向指针的指针。