C语言二维数组指针 函数引用

假设主函数里int a[3][5]
现在把这个二维数组用为fun 函数实参

而且是指针。为什么应该是int *[5]而不是int* [3]

通俗的说如果把二维数组看做一个表格的话,前面[3]代表行,而[5]代表列,
而一个数组的代表的最基本含义就是一个行,
那么数组指针的的话,必然是指向数组即指向行,那么说回这个题目,
int *[5]代表,该指针指向的是一个列为5个元素组成的数组,那么int a[3][5]代表的是有3行的每行有5个元素组成的数组,该指针指向的数组的存储大小与这个2维数组的单行存储大小匹配,自然可以指向其中的某一行
而int*[3]只有3个元素无法与5个元素相匹配,自然不能指向其中的一行
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-05-12
int a[3][5];


这时候a的类型是

int [][5]

或者是

int(*)[5]

 

代表a是一个指针,指向的是一个大小为5的一维数组

追问

为什么不是int (*)[3]

追答

指针总是先抽离第一维的

比如说

int a[3][5][7][9];

那么参数表应该是

void fun(int a[][5][7][9]);

或者

void fun(int (*a)[5][7][9]);


如果C++的话,还可以用

void fun(int (&a)[3][5][7][9]);

本回答被提问者采纳
相似回答