这里有两个问题:
- C不支持二维数组,只有数组的数组或指针数组到数组,这两者都不是完全一样的东西作为一个二维数组
- C不允许传递数组作为参数,只有指向数组的指针(通常,您使用指向数组第0个元素的指针,因为这就是数组名的最终结果,因此这样的指针索引看起来就像阵列访问)
因此,由于第一个问题,您必须决定如何表示二维数组 - 要么是数组数组,要么是指向数组的指针数组。如果你走第一条路,你的代码最终看起来像:
void set_T(float (*T1)[100]) {
... do stuff with T1[i][j] ...
}
int main() {
float T[100][100];
set_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);
}
这里的缺点是,你需要为所有的第二级阵列的分配空间和手动初始化所有第一级指针指向它们。 advangtage是第二级数组的大小不是传递给set_T的参数类型的一部分,因此您可以更轻松地处理可变大小的数组。当然,如果你真的使用C++而不是C,那么你根本不应该使用C数组 - 你应该使用std::vector
或std::array
而不是 - 它们都共享C数组1D唯一的问题,所以你需要一个矢量向量或一个数组阵列(或者可以想象一个向量阵列或向量阵列)
[将2D数组传递给函数]的可能重复(http://stackoverflow.com/questions/8767166/passing-2d-array-to-function) – legends2k 2014-03-24 12:44:56