Ici, j'ai un pointeur ptrsur un tableau arrde 4 entiers. ptrpointe vers l'ensemble du tableau. ptr[0]ou *ptrpointe vers le premier élément du tableau, donc l'ajout de 1 ptr[0]donne l'adresse du deuxième élément du tableau.
Je ne comprends pas pourquoi l'utilisation sizeof(ptr[0])donne la taille de l'ensemble du tableau, 16 octets, pas la taille uniquement du premier élément, 4 octets (comme ptr[0]pointe vers le premier élément du tableau).
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
int *ptr = arr;? En fait non. int (*ptr)[4]crée ptrun pointeur vers un tableau complet de quatre intvaleurs. Une syntaxe de pointeur comme celle-ci est nécessaire pour allouer dynamiquement des tableaux multidimensionnels réels. Les "tableaux bidimensionnels" créés avec des malloc()boucles imbriquées et décrits à tort comme des tableaux multidimensionnels sont en réalité des tableaux 1-d de pointeurs vers plusieurs tableaux 1-d. Voir stackoverflow.com/questions/42094465/…
int *ptr = arr;? Cela indiquerait le début (premier élément) du tableau, ce qui équivaut à&arr[0].