C -使用一行二维数组作为函数的参数



我有一个像这样的二维数组

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];

相关内容

  • 没有找到相关文章

最新更新