我有一个像这样的二维数组
set[3][5]={{0,0,0,1,0},{0,1,0,0,0},{0,1,1,0,0}};
我希望我的程序取一个集合,比如{0,0,0,1,0},并将其赋值给一些变量,并将这些变量作为参数传递给某个函数,并对另一组值做同样的处理。
这是我的代码,
for(i=0;i<3;i++){
a=set[i][0];
b=set[i][1];
c=set[i][2];
.
.
s=somefunc(a,b,c,d,e);
}
如果不这样做,有没有办法这样做?如何使用一行二维数组作为参数传递函数?
如果我理解正确的话,你想要这样的东西:
int somefunc (int set[5])
{
return somefunc5(set[0], set[1], set[2], set[3], set[4]);
}
int main()
{
int set[3][5]={{0,0,0,1,0},{0,1,0,0,0},{0,1,1,0,0}};
for(int i=0;i<3;i++){
s = somefunc(set[i]);
...
}
}
如果函数需要五个参数,就没有办法做到这一点。你不能让C在调用中神奇地"重新打包"一个矩阵行作为函数参数。
如果函数接受const int *args
,则可以传递该行第一个元素的地址:
s = somefunc(&set[i][0]);
,因为剩下的元素将从该地址开始。
你当然可以这样定义蹦床:
static int call5_from_row(const int *row5,
int (*func5)(int a, int b, int c, int d, int e))
{
return func5(row5[0], row5[1], row5[2], row5[3], row5[4]);
}
你会在你的原始代码中使用它,像这样:
for(i=0;i<3;i++){
s = call5_from_row(&set[i][0], somefunc);
}
但这只是你的原始代码,中间有一个额外的函数调用,这并没有更好。
您可以定义一个数组(维度等于矩阵的列数),将您想要传递的行复制到数组中,然后将其传递给函数。
在您的具体情况下:
int i, row[5];
for(i=0;i<5;i++)
row[i] = set[0][i];