[c语言]一个二维数组调用的问题。万分感谢!!

# include<stdio.h>

int max(int * a , int hang )
{
int i = 0;
int k = a[hang-1][i] ;

for(i;i<3;++i)
{
if( k < a[hang-1][i+1])
{
k = a[hang-1][i+1] ;
}
}

return k ;
}

int main(void)
{
int i ;
int a[3][4] = {
{3,16,87,65},
{4,32,11,108},
{10,25,12,37}
};

// max(a,1);
// max(a,2);
// max(a,3);

int b[3] = {max(a,1),max(a,2),max(a,3)};

for(i=0;i<3;++i)
printf("%d\t",b[i]);
printf("\n");

return 0;
}

这行代码系统老说有错误。请告诉我如何改
最重要的是为什么这样改。越详细越好
非常感谢!

这个很简单啊!
举例 int a[10]={0}
func(a)实参将一维数组名穿进去,那么形参肯定是int *b这样的指针(a[0].a[1]....a[9都表示一个整数])
int a[10][10]={0}
fun(a)实参将二维数组名穿进去,那么形参肯定是int b[][10]或者是int (*b)[10]这样的!因为a[0]...a[9]并不是一个整数,他们都代表一个数组,因此指针必须是指向数组的指针
OK????
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-29
看上去貌似是个筛选矩阵每一行最大值的函数~~
具体我也不是很清楚,但不知道为什么你要在主函数的最后加上一个返回值
还有一个问题是印象中“//”在程序中得意思好像是“//”之后的全部改为注释
我是学c++的,程序指令上和c有些出入
所以说只能看出这些问题
第2个回答  2011-07-29
a[hang-1][i]这样声明是有问题的,你的hang-1和i都是未知的,系统根本不知道该给你的数组分配多大的内存
第3个回答  2011-07-29
max的形参设置有问题,传入一个二维数组应该是这样才对,max(int (*a)[4], int hang)然后你再运行一下追问

为什么传输一个二维数组是你说的那样才行呢?
能具体说下吗?非常感谢!!!!!

追答

上面的形参代表的是数组指针,比如说你定义了一个二维数组int a[3][4],其实a[0]就是一个有四个元素的数组,所以定义int (*a)[4]就代表a指向一个拥有4个元素的数组的指针,也即所谓的数组指针,我记得当时我们学习的时候,区分数组指针和指针数组是比较重要的,相关概念可在大多C语言的参考书中找到,希望对你有所帮助

第4个回答  2011-07-29
int max(int * a , int hang )
改成int max(int ** a , int hang )
相似回答