Comprend pas une ligne de programme

cole -  
 cole -
Bonjour,

voila un programme que m'a donné mon prof :

void triplePointeur(int *pointeurSurNombre);

int main(int argc, char *argv[])
{
int nombre = 5;

triplePointeur(&nombre); // On envoie l'adresse de nombre à la fonction
printf("%d", nombre); // On affiche la variable nombre. La fonction a directement modifié la valeur de la variable car elle connaissait son adresse

return 0;
}

void triplePointeur(int *pointeurSurNombre)
{
*pointeurSurNombre *= 3; // On multiplie par 3 la valeur de la variable nombre
}

1) je ne comprend pas que signifie le signe *= juste apres pointeursurnombre dans la fonction triple pointeur.
2) est ce que *ponteurSurNombre désigne directement la variable "nombre" donc 5 ?

merc pour votre aide
Configuration: Windows Vista / Internet Explorer 8.0

8 réponses

  1. Utilisateur anonyme
     
    a *= b; est équivalent à a = a*b; (en tout cas au niveau du code, mais au niveau de l'exécution la première est un chouillat imperceptible plus rapide)

    triplePointeur(&nombre); comme c'est marqué en commentaire, tu envoies l'adresse de nombre à la fonction = tu demandes à la fonction de traiter son adresse (donc pas la valeur de nombre), donc oui.

    D'ailleurs, par rigueur, je corrige le commentaire "// On multiplie par 3 la valeur de la variable nombre" qui est faux. Si tu appelles à nouveau la fonction avec une seconde variable toto, triplePointeur(&toto); c'est bien la valeur de variable toto qui sera modifiée.
    0
  2. cole
     
    donc on peut écrire a la place de *pointeurSurNombre *= 3 <==> *pointeursurnombre = pointeursurnombre * 3 ?
    0
    1. Utilisateur anonyme
       
      non car ici ton a (de a*=b) correspond à : *pointeurSurNombre
      a *= b; est équivalent à a = a * b; ce qui n'est absolument pas a = &a * b;
      0
  3. zavenger Messages postés 817 Statut Membre 161
     
    Presque car si tu prends l'explication de bizu53, (a *= b <==> a = a * b),
    dans ton cas a = *pointeursurnombre (*pointeursurnombre correspondant a la valeur de la variable stockée a l'adresse memoire pointeursurnombre )
    0
  4. cole
     
    haaaa ok, j'ai compris (enfin j'espere) donc on peut l'écrire *pointeursurnombre = *pointeursurnombre * 3; c'est sa?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cole
     
    Merciii a vous j'ai compris enfinn, c'est compliqué les pointeurs
    0
  7. Utilisateur anonyme
     
    Ce n'est pas réellement compliqué, ça l'est quand on n'a pas de représentation en fait.
    Un pointeur n'est rien d'autre qu'une variable qui pointe sur une autre.
    Et pour "faire comprendre au code" qu'on veut utiliser la valeur pointée ou pas, on utilise l'étoile ou pas. Et pour "faire comprendre au code" qu'on veut utiliser celle qui pointe sur une valeur donnée(*), on utilise le &. C'est tout :)

    *en mémoire, parce que bien sûr il peut y avoir plusieurs pointeurs sur une même variable.
    0
  8. cole
     
    merci a toi pour tes explication, en effet je suis en plein dedans et j'avence petit a petit, heureusement vous etes la sinon ... grace a vous je bloque pas
    0