Bonjour, j'essaie de comprendre le mouvement des adresses des pointeurs.
J'ai testé avec ce code

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 l’output
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;
}
output

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
d'après moi:


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