Entrambe le istruzioni stampano gli indirizzi e sono probabilmente pensati per spiegare l'aritmetica del puntatore.
a
e &a
NON sono uguali, hanno tipi diversi, ma mantengono lo stesso indirizzo di memoria.
&a
è di tipo int (*)[10]
(che agisce come un puntatore a un array)
a
è di tipo int [10]
(che agisce come un puntatore a un unico elemento)
Quindi, quando si aggiunge 1 mantenere quei tipi in mente. Il puntatore verrà compensato dalla dimensione del tipo che contiene l'indirizzo. a+1
offset dalla dimensione di int, cioè al secondo elemento dell'array. Gli offset &a+1
superano completamente l'intero array.
fonte
2010-06-07 12:23:37
che è quasi tutto ciò che il tipo in C è di circa: l'aritmetica e la dimensione. – mathk
Per completezza, sarebbe bello aggiungere che '& a [0]' è di tipo 'int * 'e agirà molto come' a'. – Hugues
@Brian R.Bondy Quindi possiamo usare 'sizeof' per mostrare le differenze nei loro tipi? – sikisis