Comprend pas une ligne de programme

Fermé
cole - 19 févr. 2010 à 12:06
 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 samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
19 févr. 2010 à 12:54
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
donc on peut écrire a la place de *pointeurSurNombre *= 3 <==> *pointeursurnombre = pointeursurnombre * 3 ?
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
19 févr. 2010 à 13:20
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 vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161
19 févr. 2010 à 13:20
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
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 samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
19 févr. 2010 à 13:50
Oui :)
0
Merciii a vous j'ai compris enfinn, c'est compliqué les pointeurs
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
19 févr. 2010 à 14:25
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
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