我正在尝试将数组(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;
}
}
}
我不确定如何将数组传递给函数......我遇到了很多错误。任何人都可以帮忙。
答案 0 :(得分:8)
这里有两个问题:
因此,由于第一个问题,您必须决定如何表示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::vector
或std::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**
。