c语言二维数组怎么用函数一个一个调用,这样对吗

2024-12-02 14:27:51
推荐回答(5个)
回答1:

对的,是我的第二种方法。

1.可以用指针。
void Func(int **array, int m, int n);
在转变后的函数中,array[i][j]这样的式子是不对的(不信,大家可以试一下),因为编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子手工转变为:

*((int*)array + n*i + j);

2.可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:

void Func(int array[3][10]);

void Func(int array[][10]);

二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:
void Func(int array[][]);
因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多 少列,不能只指定一维而不指定第二维,下面写法是错误的:
void Func(int array[3][]);
实参数组维数可以大于形参数组,例如实参数组定义为:
void Func(int array[3][10]);
而形参数组定义为:
int array[5][10];
这时形参数组只取实参数组的一部分,其余部分不起作用。

回答2:

int sun(int a)
{
return a;
}

因为你只是要把数组的int值给传进去,所以变量为a就可以了
希望对你有帮助

回答3:

int sun(int a[i][j])
{
}
int main()
{int b[i][j]={{3,3,4},{3,5,6},{6,7,8}}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
sum=sum+fun(b[i][j]);//这样就是把一个二维数组的元素一个一个的当做参数传到函数里面去,这样应该可以
}
}
return 0;
}

回答4:

思路肯定没问题。可能代码跑不起来吧,你那样定义数组不会报错吗?本人菜鸟,不学c很久了。你还是编译运行自己看下吧。

回答5:

对的,不过代码写太难看了