Il suffit donc d'expérimenter avec des pointeurs en C.
void inc(int *p){ ++(*p); } int main(){ int x = 0; int *p; *p = x; inc(p); printf("x = %i",x); }
Pourquoi est-ce que cela affiche "x = 0" au lieu de "x = 1"?
3 Réponses :
Voici votre erreur:
inc(&x);
Vous déréférencer p
, qui n'est pas attribué, et lui donner la valeur actuelle de x
. Ainsi, x
n'est pas modifié car vous n'avez pas transmis de pointeur vers x
à votre fonction, et le déréférencement d'un pointeur non initialisé appelle comportement non défini .
Vous voulez plutôt attribuer l'adresse de x
à p
:
p = &x;
Parce que vous ne définissez pas p
sur l'adresse de x
Utilisez
*p = x;
au lieu de
p = &x;
Avec * p = x
vous indiquez un comportement indéfini car p
a une valeur indéterminée et des points * quelque part *. Mais vous ne savez pas où il pointe et avec * p = x
vous écrivez la valeur de x
dans cet emplacement mémoire.
Vous devez attribuer l'adresse de x à p. Comme mentionné dans les autres réponses, vous voudrez peut-être simplement passer inc (& x);
. Pas besoin de déclarer une variable et de la gaspiller comme ça.