Non, la valeur de ptr1 n'est pas "A"
Le pointeur contient une adresse et possède lui-même sa propre adresse qui n'a rien à voir avec son contenu
Le déroulement est le suivant (? représente un contenu indéterminé et - un objet alloué dynamiquement donc non nommé)
ligne adresse id de l'objet contenu de l'objet
6 p ptr1 ? //char *ptr1;
7 p ptr1 n //ptr1=malloc (10);
n - ?
n+1 - ?
... ... ...
12 p ptr1 n // *ptr1='A';
n - 'A'
n+1 - ?
... ... ...
16 p ptr1 n+1 //ptr1++;
n - 'A'
n+1 - ?
... ... ...
12 p ptr1 n+1 // *ptr1='A';
n - 'A'
n+1 - 'A'
n+2 - ?
... ... ...
etc.
- ligne 06 : ptr1 est un objet pointeur. Comme pour tout objet, son adresse (p) est constante et déterminée à la création de l'objet.
- ligne 07 : ptr1 contient au départ l'adresse (n) du premier byte de la mémoire allouée par le malloc (10 bytes)
- ligne 12 : à l'adresse contenue dans ptr1 (n pour i ==0 et n+1, n+2,... ensuite; en fait n+i), on place la valeur 'A'. Autrement dit, à cet élément de la zone allouée (le premier pour i==0, ensuite le second puis le troisième ... ; en fait le (i+1)
ième) on met 'A'
- ligne 13 : on affiche la valeur de &(*ptr1).
&(*ptr1) == ptr1. On affiche alors le contenu de ptr1, donc l'adresse (n+i). C'est l'adresse du (i+1)
ième élément alloué par le malloc()
- ligne 15 : on affiche la valeur de l'objet dont l'adresse , soit (n+i), est dans ptr1. Autrement dit, on affiche (char)'A', valeur placée en ligne 12.
- ligne 16 : on incrémente le contenu de ptr1 : Celui-ci contient maintenant l'adresse de l'élément suivant de la zone allouée par le malloc() (soit n+i+1)
- on retourne en ligne 12 ...
L'affichage sera du genre : (n) A (n+1) A (n+2) A ....(n+9) A
ou n est une valeur représentant l'adresse de la zone allouée par le malloc()
A la fin, la zone allouée ne contient que des 'A'.
Partager