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.