对于形参int p[][3]实际上等同于int (*p)[3],都是将p定义成了一个指向数组的指针,就是说p可以指向一个具有3个int型元素的数组。
可以像这样使用:
void f(int p[][3])
{}
int arr1[3];
int arr2[2][3];
//以下两种调用方式都对
f(&arr1);
f(arr2);
那为什么int p[][3](或int (*p)[3])必须写上一个数字呢?因为指向数组的指针的移动是以数组为单位的,p++,p+=1都是移动一个数组的内存大小,如果是3,就移动3*sizeof(int)个字节,而p+=2就是移动两个数组的内存大小。
可以将int (*p)[3]理解成int[3] *p;即p的移动是以int[3]为单位的。从这就可以看出数字3是必须的,不能省略,否则就无法计算出移动的单位是多少字节。而int *p(或int p[])之所以可以省略[]中的数字,是因为移动单位就是sizeof(int),计算时不依赖[]中的数字。
温馨提示:答案为网友推荐,仅供参考