Comprend pas une ligne de programme

cole -  
 cole - 19 févr. 2010 à 16:08
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
A voir également:

8 réponses

bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
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
cole
 
donc on peut écrire a la place de *pointeurSurNombre *= 3 <==> *pointeursurnombre = pointeursurnombre * 3 ?
0
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
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
zavenger Messages postés 811 Date d'inscription   Statut Membre Dernière intervention   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
cole
 
haaaa ok, j'ai compris (enfin j'espere) donc on peut l'écrire *pointeursurnombre = *pointeursurnombre * 3; c'est sa?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
Oui :)
0
cole
 
Merciii a vous j'ai compris enfinn, c'est compliqué les pointeurs
0
bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
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
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