Qui ho un puntatore ptra array arrdi 4 numeri interi. ptrpunta all'intero array. ptr[0]oppure *ptrpunta 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 ptrcome puntatore a un array completo di quattro intvalori. 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].