Bien! Nous avons eu quelques bonnes réponses, et certains correct explications. Mais nous allons en dire un peu plus sur ce qu'il se passe:
int main(void) {
int x[4];
printf("%p\n", x); // 0x100
printf("%p\n", x + 1); // 0x104
printf("%p\n", &x); // 0x100
printf("%p\n", &x + 1); // 0x110
}
Première ligne:
printf("%p\n", x); // 0x100
De base de la récupération de l'adresse du pointeur. C'est la seule valeur arbitraire de quatre.
printf("%p\n", x + 1); // 0x104
De base de l'arithmétique des pointeurs. Rappelons que la taille de l' int
sur un système 32 bits, soit 4 octets, de sorte que l'adresse multiplié par quatre. C'est maintenant l'indice 1 du tableau d'entiers.
printf("%p\n", &x); // 0x100
Si on vous a appris que les matrices sont équivalentes à des pointeurs, cela va vous confondre: la réponse la plus courante est que c'est une autre valeur arbitraire, c'est à dire le pointeur vers le pointeur, résidant quelque part sur la pile. Si vous essayez de code qui tente de le faire, cependant, votre compilateur va se plaindre (GCC dit "erreur: le label" x "utilisé mais non défini").
La bonne réponse est que x est l'adresse pour le premier entier de la matrice; et x est maintenant une adresse pour le tableau réel, qui se trouve être la même que l'adresse pour le premier entier de la matrice.
Si x a été définie comme x*, et nous malloc ed le montant approprié de la mémoire, le comportement serait différent. Et lors du passage de pointeurs par le biais de fonctions, la distinction disparaît. Mais un pointeur vers le tableau n'est pas la même chose qu'un pointeur vers le premier élément du tableau!
printf("%p\n", &x + 1); // 0x110
Si vous avez répondu 3 mal, vous auriez certainement obtenir 4 faux, parce que l'extension de cette ligne de pensée, nous sommes en train de parler d'un pointeur vers un pointeur, et puis l'arithmétique des pointeurs, de 4 octets de la valeur.
Si vous avez réalisé que 3 est maintenant un pointeur sur un tableau, vous aussi, vous rendre compte que faire de l'arithmétique des pointeurs serait en ce qui concerne la taille du tableau, pas le pointeur.
Merci à tous ceux qui ont participé!