PDA

View Full Version : [C] domandina sui punatori


D4rkAng3l
24-04-2006, 11:42
Data una matrice (ad esempio int a[3][5]; ) perchè:

*(a[i] + j) corrisponde a a[i][j] ?

Grazie
Andrea

Ziosilvio
24-04-2006, 11:49
Data una matrice (ad esempio int a[3][5];) perchè:

*(a[i] + j) corrisponde a a[i][j] ?
Cominciamo dall'inizio: a è un array di array di int.
Di conseguenza, a[i] è un array di int.
Nell'espressione "a[i]+j", j è un int, e a[i] viene convertito a un puntatore ad int, il cui valore è l'indirizzo dell'elemento di indice 0 dell'array a[i], ossia a[i][0].
Ma allora, il valore dell'espressione "a[i]+j", è l'indirizzo dell'elemento di indice j dell'array a[i] (in un array, gli elementi successivi sono consecutivi), e l'espressione in sé è di tipo puntatore a int.
Pertanto, quando applichi l'operatore di dereferenziazione all'oggetto a[i]+j, ottieni il valore contenuto nella locazione di memoria corrispondente all'elemento di indice j dell'array a[i]: e tale valore è proprio a[i][j].

Fenomeno85
24-04-2006, 11:52
Data una matrice (ad esempio int a[3][5];) perchè:

*(a[i] + j) corrisponde a a[i][j] ?

Grazie
Andrea

edit

~§~ Sempre E Solo Lei ~§~