Es gibt zwei Probleme hier:
- C nicht unterstützt 2D-Arrays, nur Arrays von Arrays oder Arrays von Zeigern auf Arrays, von denen keiner genau das gleiche wie ein 2D-Array ist
- C erlaubt keine Übergabe von Arrays als Argumente, nur Zeiger in Arrays (im Allgemeinen verwenden Sie einen Zeiger auf das 0. Element eines Arrays, da der Name des Arrays so endet, dass die Indizierung eines solchen Zeigers genau wie ein aussieht Array-Zugriff)
Also wegen des ersten Problems müssen Sie entscheiden, wie Sie ein 2D-Array darstellen wollen - entweder ein Array von Arrays oder ein Array von Zeigern auf Arrays. Wenn Sie die erste Route, der Code gehen endet aussehen wie:
void set_T(float (*T1)[100]) {
... do stuff with T1[i][j] ...
}
int main() {
float T[100][100];
set_T(T);
}
Hier haben Sie erklären T ein Array von 100 Arrays von 100 Schwimmer zu sein, und set_T nimmt einen Zeiger auf Arrays von 100 Schwimmern als sein Argument. Sie übergeben 'T' direkt an set_T, da die Sprache Array-Namen als Zeiger auf ihr 0tes Element behandelt.
Wenn Sie stattdessen ein Array von Zeigern verwenden möchten, um Arrays, am Ende mit etwas nach oben wie:
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);
}
Der hier Nachteil ist, dass man Platz für alle der Second-Level-Arrays zuweisen müssen und initialisieren Sie alle Zeiger der ersten Ebene manuell, um auf sie zu zeigen. Der Vorteil besteht darin, dass die Größen der Arrays der zweiten Ebene nicht Teil des an set_T übergebenen Arguments sind, so dass Sie Arrays mit variabler Größe einfacher handhaben können.
Natürlich, wenn Sie wirklich C++ und nicht C verwenden, sollten Sie überhaupt keine C-Arrays verwenden - Sie sollten stattdessen std::vector
oder std::array
verwenden - beide teilen nur das C-Array-1D-Problem, so benötigen Sie einen Vektor von Vektoren oder ein Array von Arrays (oder denkbar ein Vektor von Arrays oder ein Array von Vektoren)
mögliche Duplikate von [2D-Array an Funktion übergeben] (http://stackoverflow.com/questions/8767166/passing-2d-array-to-function) – legends2k