Vous n'êtes pas identifié(e).
Dernière modification par hukros (26-02-2017 00:46:06)
Hors ligne
Hors ligne
Hors ligne
Produit la sortie suivante :
Dans les deux fonctions par_addresse et par_valeur on
ajoute un à l'argument.
Dans la fonction par_valeur on passe une copie de la valeur de
un_entier. Au retour de la fonction sa valeur n'a pas changé.
Dans la fonction par_adresse on passe l'adresse de la variable
en argument grâce à &entier. Cette fonction attend bien
l'addresse d'une variable qui représente un entier, c'est ce que
dit la déclaration int *entier. Ce qui veut dire que
*entier est un int. Et donc que entier est un pointeur
vers un int. C'est pour cela que dans cette fonction pour additionner
un je travaille sur *entier (et non sur entier qui est une
addresse…).
Du coup je modifie bien ce qu'il y a a l'adresse « entier » qui
correspond à l'addresse de « un_entier » dans le main. Et j'ajoute
effectivement un à « un_entier ».
J'espère avoir été clair
Tu peux compiler ce petit exemple, et l'exécuter pour voir le
résultat par toi même
Dernière modification par enicar (31-12-2016 00:52:30)
Hors ligne
Ce qui produit la sortie :
Dans par_valeur, l'adresse de entier (&entier)
n'a rien à voir avec l'adresse de un_entier dans main.
Dans par_adresse la valeur de entier est égale
à l'adresse de un_entier dans main. La valeur rangée
à cette adresse est *entier et est égale à 2.
L'adresse &entier n'a rien à voir avec l'adresse de
un_entier, car ces deux variables occupent des places
différentes en mémoire.
Si tu compiles et exécutes ce programme, en général, tu n'obtiendra
pas les mêmes valeurs pour les adresses.
Voilà, c'est pas facile d'expliquer ces histoires, mais j'espère que
tu auras compris
Et bonne fête de fin d'années !
EDIT: un livre qu'il faut absolument lire lorsqu'on apprend le C :
Le langage C par les créateurs du langage : Brian W. Kernighan et Dennis M. Ritchie.
Dernière modification par enicar (31-12-2016 12:54:14)
Hors ligne
Dernière modification par hukros (03-01-2017 00:52:20)
Hors ligne