J'ai créé une variable puis j'ai imprimé son numéro d'emplacement. J'ai ensuite incrémenté l'emplacement mémoire de 1. J'ai obtenu les résultats souhaités dans deux cas tandis qu'un cas donne une réponse qui n'a pas pu être expliquée correctement par mes professeurs. Ce serait vraiment utile que quelqu'un me dise pourquoi le deuxième printf ("% p \ n", & i) donne le même résultat que la première fois.
int main()
{
int i=3,*x;
x=&i;
printf("%p\n",x);
printf("%p\n",&i);
printf("%p\n",&(*x));
x++;
printf("\n");
printf("%p\n",x);
printf("%p\n",&i);
printf("%p\n",&(*x));
}
0x7ffce5dc5208
0x7ffce5dc5208
0x7ffce5dc5208
0x7ffce5dc520c
0x7ffce5dc5208
0x7ffce5dc520c
5 Réponses :
L'adresse d'une variable ne change jamais pendant sa durée de vie. Le fait que x commence par contenir la valeur de cette adresse et que vous incrémentez ensuite la valeur de x ne signifie pas que l'adresse de i change .
Prenant une analogie avec les commentaires, supposons que vous écrivez l'adresse de votre maison sur un morceau de papier. Supposons maintenant que vous incrémentiez la valeur du numéro de maison sur cette feuille de papier. Votre maison n'est pas dans un endroit différent, vous venez de changer le numéro de maison que vous avez noté.
Ainsi, & i aura toujours la même valeur, quelle que soit la valeur que x peut contenir.
Chaque objet d'un programme C a une adresse fixe unique au cours de son existence. Vous stockez une copie de l'adresse de i dans x . Ensuite, vous manipulez x pour changer la valeur qu'il contient, il contient maintenant une autre adresse. Mais la manipulation de la valeur dans x ne déplace pas i . L'objet nommé i est toujours au même endroit.
Chaque objet d'un programme C a une adresse fixe unique au cours de son existence. - Vrai, mais comment cela est-il lié à ce contexte? Même si ce n'était pas le cas, le résultat ici ne changerait pas
@SouravGhosh - Pour dissoudre toute attente que cela puisse changer, et éduquer un peu l'OP sur un contexte plus large.
@StoryTeller TBH, que l'adresse d'une variable puisse être modifiée pendant l'exécution ou non n'a pas d'importance ici. Ce que OP doit savoir, c'est que les instructions n'ont même jamais tenté de changer la valeur de & i , en premier lieu. J'ai essayé de couvrir cela dans ma réponse. Ne pas dire que le vôtre est faux, mais peut-être que vous pouvez envisager de reformuler.
@SouravGhosh - Avec tout le respect que je vous dois, je ne suis pas d'accord. Je considère que cela est pertinent au malentendu du PO. Et j'ai évoqué la manipulation d'une copie. Je vais le garder tel quel, merci.
Parce que la valeur du pointeur est incrémentée mais que l'adresse de la variable i reste la même. La variable de pointeur est également une variable qui contient l'adresse de la variable i , la modification de sa valeur n'affectera pas l'adresse de la variable i .
Le morceau de code x = & i copie l'adresse de i dans le pointeur x . C'est une copie, donc le modifier ne modifie que la valeur stockée dans x , jamais il ne changera l'adresse de i .
Je ne suis pas sûr de ce que vous essayez d'accomplir. Vous ne pouvez pas modifier l'adresse d'une variable.
Cela n'a rien à voir avec les pointeurs et l'adresse mémoire, en particulier. Vérifiez le programme ci-dessous
int x = 5;
int y = x;
printf (" x= %d, y = %d\n", x, y);
y++;
printf (" x= %d, y = %d\n", x, y);
Sortie:
x = 5, y = 5
x = 5, y = 6
La modification de y n'affecte pas la valeur de x . Il en va de même dans votre cas.
En termes simples, x et i sont deux variables différentes, elles ont leurs propres valeurs. Maintenant, étant donné que x est un pointeur et attribué avec la valeur de l'adresse de i , vous pouvez utiliser x pour obtenir la valeur stocké dans i . Mais c'est tout.
Cela ne "lie" pas en quelque sorte les deux variables ensemble, elles peuvent toujours être modifiées indépendamment l'une de l'autre. Seule chose, après avoir modifié la valeur de x , vous ne pouvez plus l'utiliser pour accéder à la valeur stockée dans i , car elle ne pointe pas vers l'adresse de je plus.
Si votre enseignant ne peut pas expliquer pourquoi
& ia la même valeur deux fois, il ne devrait pas enseigner C.Si vous écrivez votre adresse personnelle sur un morceau de papier et que je change le numéro de maison sur ce papier, avez-vous une nouvelle maison?
@molbdnilo Je pensais à cette façon de passer de mon petit appartement à un château (plus approprié pour ma DB9), ça ne marche pas? tu as tué mon rêve, mauvais garçon ^^