Passage par adresse et par valeur

Fermé
ismailzr99 Messages postés 4 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 11 mars 2018 - 11 mars 2018 à 18:21
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 11 mars 2018 à 19:51
Bonjour tout le monde j'ai un probleme je fais ppas la difference entre le passage par adresse et par valeur et quand l'utiliser
Merci d'avance

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
11 mars 2018 à 18:39
Bonjour,

En réalité, en C le passage se fait toujours par valeur. Si le paramètre a le type pointeur, on peut lui passer l'adresse d'une variable ou bien un pointeur du même type.
Comme on ne peut passer que des valeurs, la fonction ne reçoit qu'une copie et ne peut donc jamais modifier la variable initialement transmise. Heureusement, il y a les pointeurs. En déréférençant le pointeur (l'étoile mise devant), qui contient adresse on va pouvoir accéder à la variable initiale.
Exemple :
int x = 42;
printf( "%d" , x ); // printf n'a besoin que de la valeur
scanf( "%d" , &x ); // scanf a besoin de l'adresse, sinon il ne pourrait modifier la valeur de x
2
ismailzr99 Messages postés 4 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 11 mars 2018
11 mars 2018 à 18:53
Merci donc pour conclure on peut jamais modifier la variable initiale par le passage par valeur
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
11 mars 2018 à 19:51
Tout à fait. Y compris quand on veut modifier un tableau, le nom du tableau est passé et le tableau est modifiable; en réalité le nom du tableau est directement associé à un pointeur sur le 1er élément.
char tab[20];
scanf( "%s" , tab ); // pas de & ici car tab est équivalent à &tab[0]
0