Pointeurs, adresses: exercices(2)
Dans le programme suivant i est à l'adresse 3000 (base 10) et toutes les variables sont consécutives en mémoire:
int main (void)
{
int i = 1;
int j = 3;
int* p1 = &i;
int** p2 ;
char s[19] = "langage C";
char* ps = s+1;
char* ps2;
char c;
char c1;
ps++;
s++;
*(&i +1) = 4;
ps = *(s+1);
ps2 = s + 4;
c = *(ps2 + 1);
p1++;
*p1 = 5;
c1 = **(ps2);
p2 = &p1;
**p2 = 6;
return(0);
}



adresse de i: 3000
adresse de j: 3002

adresse de p1: 3004          valeur de p1: 3000
adresse de p2: 3008
adresse de s: 3012
adresse de ps: 3031           valeur de ps: 3013
adresse de ps2: 3035
adresse de c: 3039
adresse de c1: 3040
valeur de ps: 3014
valeur de s: erreur s n'est pas un vrai pointeur juste une adresse
zone affectée?: 3002 (équivalent à  j=4)
valeur de ps: erreur ps est un pointeur et *(s + 1) est un entier
valeur de ps2: 3016
valeur de c: g
valeur de p1: 3002
zone affectée?: 3002 (équivalent à j=5)
valeur de c1: erreur ps2 n'est pas un pointeur de pointeur
valeur de p2: 3004
zone affectée?: 3002 (équivalent à j=6)

suivant         plan