這裏有兩個問題:
- 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