Bonjour, j'essaie de comprendre le mouvement des adresses des pointeurs.
J'ai testé avec ce code
output
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char *x = malloc(1); char *y = malloc(1); *x = 20; *y = 3; printf("x: %p %p %d\n",&x,x,*x ); printf("y: %p %p %d\n",&y,y,*y ); // Première partie de loutput char*temp=x;x =y;y = temp; printf("x: %p %p %d\n",&x,x,*x ); printf("y: %p %p %d\n",&y,y,*y ); free(x); free(y); return 0; }
d'après moi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 x : ffbffaa4 20a58 2 y : ffbffaa0 20a68 3 (devient) x : ffbffaa4 20a68 3 y : ffbffaa0 20a58 2
un pointeur pointe sur une adresse mémoire donc
*x pointe sur &x qui, elle, contient 2.
Ce qui se passe lors de ce morceau de code :
char* temp = x ;
x = y ;
y = temp ;
Un pointeur sur une case char est créé, sur lequel on va assigner la valeur de x donc 2. On va écraser x par la valeur de y ( 3 ) et écraser ensuite y en le remplaçant par temp (donc l'ancienne valeur de x : 2 )
Ce qui se passe dans la mémoire est que l'on a 2 pointeurs. Le premier pointe vers une case qui a une valeur 2 et le second vers une case qui a une valeur de 3.
Ensuite, on place la valeur x dans temp et le pointeur va pointer sur cette nouvelle case. Idem lorsque l'on écrasera x par 3, le pointeur *y va pointer sur x
et puis enfin le pointeur de x pointera sur la variable y
Ce qui explique que seule l'adresse des cases des 2 variables n'ait pas bougé.
Mais je voudrais vérifier si j'ai juste ou tort.
Merci
Partager