Stavo leggendo una conferenza sugli array per Fortran 90 e mi sono imbattuto in questa frase: 'Fortran memorizza sempre per colonne: il primo indice varia più rapidamente del secondo e così via. '
Che cosa intende dire l'autore?
Questi sono davvero due punti separati, quindi affrontiamoli separatamente:
"Fortran memorizza sempre per colonna.": Ciò significa che a(i,j)
denota l'elemento della matrice 2D a
corrispondente alla colonna i
, riga j
.
"Il primo indice varia più rapidamente del secondo e così via.": Per avere un senso, aiuta a pensare agli array che vengono memorizzati su un supporto unidimensionale, indipendentemente dalla loro dimensione. Per un array 2D con m
righe e n
colonne, dovremmo memorizzare il primo elemento della seconda colonna immediatamente accanto all'ultimo elemento della prima colonna, ecc. Ciò equivale a "impilare" le colonne. La distanza in questa struttura 1D tra a(i,j)
e a(i,j+1)
è una, ma la distanza tra a(i,j)
e a(i+1,j)
è m
, la lunghezza di una colonna. La quantità di distanza percorsa quando si aggiunge uno all'indice della colonna è più alta, quindi questo indice 'varia più rapidamente'.
Ad esempio, se hai un array A tale che A (1, 1) = 100, A (2, 1) = 200, A (1, 2) = 300, A (2, 2) = 400 e se hai la seguente riga nel tuo codice Fortran 90
print*, A
riceverai "100 200 300 400" nell'output anziché "100 300 200 400".
Leggi altre domande sui tag fortran