使用一行二维数组作为参数来起作用

时间:2014-03-18 09:49:03

标签: c arrays multidimensional-array

我有这样的二维数组,

set[3][5]={{0,0,0,1,0},{0,1,0,0,0},{0,1,1,0,0}};

我希望我的程序采用类似{0,0,0,1,0}的集合并将其分配给某些变量并将这些变量作为参数传递给某些函数,并对其他值集执行相同的操作。 / p>

这是我的代码,

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);
}

有没有办法做到这一点?如何使用一行二维数组作为函数的参数传递?

3 个答案:

答案 0 :(得分:3)

如果我理解正确,你需要这样的东西:

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]);
    ...
  }
}

答案 1 :(得分:1)

如果函数需要五个参数,则无法执行此操作。你不能让C神奇地“重新打包”矩阵行作为调用中的函数参数。

如果函数接受const int *args,您可以传递该行上第一个元素的地址:

s = somefunc(&set[i][0]);

因为剩下的元素将从该地址开始。这是有效的,因为C使用row-major order

你当然可以定义一个蹦床来做到这一点:

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);
}

但这只是你原来的代码,中间有一个额外的函数调用,它并不是更好。

答案 2 :(得分:1)

您可以定义一个数组(维度等于矩阵的列数),复制您想要传入数组的行,然后将其传递给函数。

在您的具体案例中:

int i, row[5];

for(i=0;i<5;i++)
   row[i] = set[0][i];