如何将二维数组传递给c ++中的函数

时间:2012-04-02 00:24:26

标签: c++

我正在尝试将数组(2d)作为参数传递给函数。 我有一个代码如下:

int main()
 {
  float T[100][100];
  void set_T(float T[][]);
}


void set_T(float T1[][])
{


  for (int i =0 ; i<90;i++)
  {
      for(int j =0 ;j <90;j++)
      {
          T1[i][j] = 3;
      }
  }

}

我不确定如何将数组传递给函数......我遇到了很多错误。任何人都可以帮忙。

3 个答案:

答案 0 :(得分:8)

这里有两个问题:

  • C不支持2D数组,只支持数组的数组或指向数组的指针数组,这两者都与2D数组完全相同
  • C不允许将数组作为参数传递给函数,只允许指向数组的指针(通常,你使用指向数组的第0个元素的指针,因为这就是数组的名称最终是这样的,所以索引这样的指针看起来就像数组访问)

因此,由于第一个问题,您必须决定如何表示2D数组 - 数组数组或数组指针数组。如果你走第一条路线,你的代码最终会像:

void set_T(float (*T1)[100]) {
    ... do stuff with T1[i][j] ...
}

int main() {
    float T[100][100];
    set_T(T);
}

在这里,您已经将T声明为包含100个浮点数的100个数组的数组,并且set_T将指向100个浮点数组的指针作为其参数。您将'T'直接传递给set_T,因为该语言将数组名称视为指向其第0个元素的指针。

如果您想使用指向数组的指针数组,最终会得到类似的结果:

void set_T(float **T1) {
    ... do stuff with T1[i][j] ...
}

int main() {
    float *T[100];
    float space[100*100];
    for (int i = 0; i < 100; i++)
        T[i] = space + i*100;
    set_T(T);
}

这里的缺点是你需要为所有二级数组分配空间,并手动初始化所​​有第一级指针以指向它们。优点是第二级数组的大小不是传递给set_T的参数类型的一部分,因此您可以更轻松地处理可变大小的数组。

当然,如果你真的使用C ++而不是C,你根本不应该使用C数组 - 你应该使用std::vectorstd::array - 两者都分享C数组1D只发出,所以你需要一个矢量矢量或一个数组数组(或者可以想象一个数组矢量或一个矢量数组)

答案 1 :(得分:5)

  void set_T(float (&T)[100][100]);

答案 2 :(得分:-3)

就这样称呼它:

int main ()
{
    float T[100][100];
    set_T(T);
}

正如@suddnely_me所说,函数声明中T1的类型必须是float**