Qui ho un puntatore ptr
a array arr
di 4 numeri interi. ptr
punta all'intero array. ptr[0]
oppure *ptr
punta al primo elemento dell'array, quindi l'aggiunta di 1 a ptr[0]
fornisce l'indirizzo del secondo elemento dell'array.
Non riesco a capire perché l'utilizzo sizeof(ptr[0])
fornisca la dimensione dell'intero array, 16 byte, non la dimensione del solo primo elemento, 4 byte (come ptr[0]
indica il primo elemento dell'array).
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
int *ptr = arr;
? In realtà no. int (*ptr)[4]
crea ptr
come puntatore a un array completo di quattro int
valori. Sintassi del puntatore del genere è necessaria per allocare dinamicamente array vero-multidimensionali. Gli "array bidimensionali" creati con malloc()
loop nidificati e erroneamente descritti come array multidimensionali sono in realtà array 1-d di puntatori a più array 1-d. Vedi stackoverflow.com/questions/42094465/…
int *ptr = arr;
? Ciò indicherebbe l'inizio (primo elemento) dell'array, che equivale a&arr[0]
.