gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:17 25 4
gpt4 key购买 nike

我正在尝试将数组 (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;
}
}

}

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

最佳答案

这里有两个问题:

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

因此,由于第一个问题,您必须决定如何表示二维数组——要么是数组的数组,要么是指向数组的指针的数组。如果你走第一条路线,你的代码最终看起来像:

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

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

在这里,您已将 T 声明为由 100 个 100 个 float 组成的数组,set_T 将指向 100 个 float 的数组的指针作为其参数。您将“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 array 1D only 问题,因此您需要一个 vector vector 或数组数组(或者可以想象为数组 vector 或 vector 数组)

关于c++ - 如何将二维数组传递给C++中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9969558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com