Ci sono due problemi qui:
- C non supporta gli array 2D, solo array di array o array di puntatori ad array, nessuno dei quali è proprio la stessa cosa come una matrice 2D
- C non consente agli array passanti di funzionare come argomenti, solo puntatori negli array (in generale, si utilizza un puntatore allo 0 ° elemento dell'array, poiché questo è ciò che il nome dell'array finisce per essere indicizzato da un puntatore simile a un altro accesso alla rete)
Quindi, a causa del primo problema, è necessario decidere come rappresentare un array 2D: una serie di array o una serie di puntatori agli array. Se si va il primo percorso, il codice finisce per assomigliare:
void set_T(float (*T1)[100]) {
... do stuff with T1[i][j] ...
}
int main() {
float T[100][100];
set_T(T);
}
Qui, hai dichiarato T ad essere un array di array di 100 100 carri, e set_T richiede un puntatore ad array di 100 carri come la sua argomentazione. Si passa 'T' direttamente a set_T, poiché la lingua tratta i nomi degli array come puntatori al loro 0 ° elemento.
Se invece si desidera utilizzare un array di puntatori ad array, si finisce con qualcosa di simile:
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);
}
Lo svantaggio è che è necessario allocare spazio per tutti gli array di secondo livello e inizializzare manualmente tutti i puntatori di primo livello per puntare su di essi. Il vantaggio è che le dimensioni degli array di secondo livello non fanno parte del tipo dell'argomento passato a set_T, quindi è possibile trattare più facilmente array di dimensioni variabili.
Ovviamente, se stai usando C++ e non C, non dovresti utilizzare affatto array C - dovresti utilizzare std::vector
o std::array
- entrambi che condividono solo il problema con l'array C 1D, quindi è necessario un vettore di vettori o una matrice di matrici (o presumibilmente un vettore di matrici o un array di vettori)
fonte
2012-04-02 00:40:20
possibile duplicato di [passaggio di matrice 2D a funzione] (http://stackoverflow.com/questions/8767166/passing-2d-array-to-function) – legends2k