2
votes

Pourquoi cette fonction n'incrémente-t-elle pas ma variable en c?

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"?


0 commentaires

3 Réponses :


7
votes

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;


0 commentaires

2
votes

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.


0 commentaires

0
votes

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.


0 commentaires