Ici, j'ai un pointeur ptr
sur un tableau arr
de 4 entiers. ptr
pointe vers l'ensemble du tableau. ptr[0]
ou *ptr
pointe 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 ptr
un pointeur vers un tableau complet de quatre int
valeurs. 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]
.