So che la domanda è stata risolta, ma non ho potuto resistere alla condivisione di questa spiegazione.
ricordo Principi di progettazione del compilatore, Ipotizziamo un è un array int e la dimensione del int è 2, & indirizzo di base per una è 1000.
Come funzionerà a[5]
->
Base Address of your Array a + (index of array *size of(data type for array a))
Base Address of your Array a + (5*size of(data type for array a))
i.e. 1000 + (5*2) = 1010
Questa spiegazione è anche la ragione per cui gli indici negativi negli array funzionano in C.
cioè se accedo a[-5]
mi darà
Base Address of your Array a + (index of array *size of(data type for array a))
Base Address of your Array a + (-5 * size of(data type for array a))
i.e. 1000 + (-5*2) = 990
Si ritornerà mi oppongo a posizione 990. Con questa logica possiamo accedere indici negativi in Array in C.
fonte
2016-05-05 06:31:34
Nota anche che non devi dereferenziare il puntatore per ottenere UB. Il semplice calcolo di 'somearray-2' non è definito a meno che il risultato non sia compreso nell'intervallo dall'inizio di' somearray' a 1 dopo la sua fine. – RBerteig
Nei libri più vecchi il '[]' è stato referenziato come * sintassi sugar * per l'aritmetica del puntatore. * Il modo preferito per confondere i principianti è quello di scrivere '1 [arr]' - invece di 'arr [1]' - e vederli indovinare cosa vorrebbe dire. – Dummy00001
Cosa succede sui sistemi a 64 bit (LP64) quando si ha un indice int a 32 bit che è negativo? L'indice dovrebbe essere promosso a un int con firma a 64 bit prima del calcolo dell'indirizzo? –