Se l'espressione type name[count] è scritta in qualche funzione, allora dici al compilatore C di allocare sul frame dello stack sizeof(type)*count byte e calcola l'indirizzo del primo elemento dell'array.
Se l'espressione type name[count] è scritta al di fuori di tutte le definizioni di funzioni e struct, allora dici al compilatore C di allocare sul segmento dati sizeof(type)*count byte e calcola l'indirizzo del primo elemento dell'array.
name è in realtà un oggetto costante che memorizza l'indirizzo del primo elemento dell'array e ogni oggetto che memorizza un indirizzo di una certa memoria è chiamato puntatore, quindi questo è il motivo per cui si tratta name come puntatore anziché un array. Si noti che è possibile accedere agli array in C solo tramite puntatori.
Se count è un'espressione costante che valuta zero, allora comunichi al compilatore C di allocare zero byte sul frame dello stack o sul segmento dati e restituire l'indirizzo del primo elemento dell'array, ma il problema nel fare questo è che il primo elemento dell'array di lunghezza zero non esiste e non puoi calcolare l'indirizzo di qualcosa che non esiste.
Questo è razionale quell'elemento n. count+1 non esiste in count -length array, quindi questo è il motivo per cui il compilatore C vieta di definire l'array a lunghezza zero come variabile all'interno e all'esterno di una funzione, perché qual è il contenuto di name quindi ? Quale indirizzo name memorizza esattamente?
Se p è un puntatore, l'espressione p[n] equivale a *(p + n)
Dove l'asterisco * nell'espressione destra è operazione di dereferenziazione del puntatore, che significa accedere alla memoria puntata da p + n o accedere alla memoria il cui indirizzo è memorizzato in p + n , dove p + n è espressione del puntatore, esso prende l'indirizzo di p e aggiunge a questo indirizzo il numero n moltiplica la dimensione del tipo del puntatore p .
È possibile aggiungere un indirizzo e un numero?
Sì, è possibile, perché l'indirizzo è un numero intero senza segno comunemente rappresentato in notazione esadecimale.