Come funziona questa allocazione di array bidimensionali? [chiuso]

-3

Stavo vedendo questo post su StackOverflow e visto un nuovo modo (almeno per me) per definire una matrice bidimensionale di 5x5, funziona bene, ma sento di non capire cosa sta succedendo in background.

Il codice è.

double (*matrix)[5] = malloc(5 * sizeof *matrix);

Come può questo definire un array bidimensionale di 5x5?, prima ho pensato che n malloc fossero necessari per produrre un array n-dimensionale, ma a quanto pare ho sbagliato.

    
posta OiciTrap 19.12.2014 - 21:59
fonte

1 risposta

1

matrix è un puntatore a una matrice di 5 elementi di double ; questo significa che il tipo di espressione *matrix è "matrice di 5 elementi di double "; sizeof *matrix restituirà il numero di byte richiesti da tale oggetto.

Quindi stiamo dicendo a malloc di mettere da parte abbastanza memoria per 5 matrici a 5 elementi di double , e assegnare il puntatore risultante a matrix .

A causa di come funziona l'aritmetica del puntatore, matrix punta al primo array di 5 elementi, matrix + 1 punta al secondo array di 5 elementi, matrix + 2 punta al terzo array di 5 elementi, ecc.

Poiché a[i] equivale a *(a + i) , l'espressione matrix[i] ci dà il i 'l'array di 5 elementi, quindi matrix[i][j] ci dà l' j ' l'elemento di i 'l'array di 5 elementi.

    
risposta data 19.12.2014 - 23:54
fonte

Leggi altre domande sui tag