Char* et char** (paramètre de fonction in ou out)

jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 - 2 juil. 2004 à 11:28
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 - 4 juil. 2004 à 19:11
Bonjour,

Je ne débute pas le C, mais pourtant il y a un truc que j'ai du mal à saisir...

En C :
Quand on veut passer un int en paramètre d'une fonction.
Soit on le passe par valeur : int arg
ou par référence : int *arg

Je comprend bien que dans le cas d'un passage par valeur, il y a recopie du paramètre sur la pile du programme.
Et dans le cas du passage par référence, c'est le pointeur qui est recopier, donc l'adresse de la variable arg passé en paramètre (on travaille donc directement dans la fonction sur la valeur passé en paramètre).

Ce que je ne comprend pas, c'est pour les char*.

Quand on passe un char* en paramètre d'une fonction, il faut faire char** pour le passé par référence...

Pourquoi ??? car char* devrait déjà être un passage par référence ??? Esct-ce lié au compilateur ???

Idem pour certaine structure... qu'il faut passer en ** dans les fonctions pour les passer par référence.

J'espère que j'ai bien posé clairement ma question (et qu'on ne me répondra pas par un cours sur le passage par valeur ou par référence que j'ai déjà assimilé il y a bien longtemps)...

Merci,

Jock

3 réponses

FreeYo Messages postés 31 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 7 octobre 2004
2 juil. 2004 à 14:15
8-) FreeYo

En fait, le ** permet de passer par référence un pointeur. C’est donc l’adresse qui est modifiée et non la valeur pointée.

Dans l’exemple du char**, l’adresse du pointeur est modifiée de manière à pointer sur les données désirées sans avoir à effectuer ni allocation mémoire, ni copie de ces données.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 juil. 2004 à 16:46
Si tu comprends comment ca marche pour les int, tu comprends comment ca marche pour les char aussi. Ce que tu dois savoir, c'est qu'en fait il n'y a qu'un type de passage de paramètres en C (le passage pas reference, c'est du C++). Quand tu passe un pointeur, c'est comme si tu passais un variable normale...sauf que c'est pointeur, donc tout se fait de la même façon. Si tu veux modifier un char*, il faut que tu passe un pointeur dessus, et donc passer un char**. Quand tu passes un char*, tu ne le modifie pas, tu modifies juste ce sur quoi il pointe!
0
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
4 juil. 2004 à 19:11
Ok, merci pour ces explications messieurs...

J'ai compris maintenant...
0
Rejoignez-nous