C : besoin d'explication sur l'affectation par valeur

C : besoin d'explication sur l'affectation par valeur - Programmation

Marsh Posté le 27-03-2001 à 09:43:19    

Hi,
 
suis un newbie en programmation, j'apprend le C où, jusqu'à présent j'avais l'impression de m'amuser. Mais maintenant, j'en suis à la notion de fonctions et le cours qui suit concerne les pointeurs.
 
j'ai qq pb pour bien comprendre cette histoire d'affectation par valeur. J'ai du mal à discerner l'adresse d'une variable de la variable elle-même.
 
Je sais que ce genre de question conne fera sourire les gros pros qui se demanderont bien à quel abruti ils ont affaire. Eux, pas la peine de répondre les gars si c'est pour dire des âneries genre "c'est pourtant simple". Simple pour vous ne signifie pas automatiquement simple pour tout le monde !
 
Si qq aurait la patience d'expliquer ces notions de manière simple, concise et documentée (exemples), ça m'arrangerait vachement !
 
MERCI !!! :p


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 27-03-2001 à 09:43:19   

Reply

Marsh Posté le 27-03-2001 à 10:17:00    

Une variable tu peut voir ca comme une valeur (stokee qq par en memoire) ou comme un emplacement memoire (dans lequel il y a une valeur). C'est la dualite de la variable.
 
Quand tu passe un argument par valeur tu cree un deuxieme emplacement en memoire ou tu copie la valeur stockee dans le premier emplacement. Si tu modifie cette valeur ca ne modifie pas celle qui est stockee dans le premier emplacement.
 
Quand tu passe par adresse, tu passe directement l'emplacement memoire.
 
Il est tout a fais normal que tu ne puisse discerner la variable de son adresse, ce que tu dois discerner c'est son adresse de sa valeur...
 
l'adresse c'est la boite au lettres...
la valeur c'est les lettres
la variable c'est le courrier donc des lettres dans une boite aux lettres. Pour prendre les lettres il faut savoir ou est la boite
si tu copie des lettres d'un boite pour les mettre dans une autre, puis que les brules, il te reste les originaux...
 
Une autre analogie c'est le verre d'eau, le verre c'est l'adresse, l'eau la valeur, tu ne peut pas manier l'eau sans verre, mais ce qui t'interresse c'est l'eau pas le verre...
 
J'espere que maintenant c'est simple...

Reply

Marsh Posté le 27-03-2001 à 15:49:50    

Si je comprend bien (aie aie aie, attention les ziouxxxxxx)
 
:p
 
Si l'on n'utilise pas les pointeurs, il n'y a donc que les variables globales dont on peut utiliser la valeur sans que celle-ci soit copiée ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 27-03-2001 à 16:21:04    

Le Pb c'est que je ne vois pas comment ne pas utiliser de pointeurs en C...
 
Ce que tu dis est vrai pour un appel de fonction, et non pas pour une affectation a = b+c par exemple
 
int TotoFunct(int a, int b) /* C ansi */
{
 a = b;
 return a;
}
 
main()
{
 int a = 5;
 int b = 3;
 int c = 1;
 c = TotoFunct(a,b)
}
A la fin de ce code on a a=5, b=3, c=3, puisque a et b on ete passe par valeur. l'affectation dans TotoFunct n'a aucune influence sur les parametres passes dans main.
 
en fait ici a dans TotoFunct n'est pas la meme variable que le a de main, simplement le a de TotoFunct reprend la VALEUR de a de main.
 
comme la fonction peut renvoyer une valeur c lui est modifie, et prends la valeur de a de TotoFunct, qui lui-meme la tiens de b de TotoFunct qui lui-meme la tiens de b de main.
 
C'est la meme chose avec un pointeur, mais comme la valeur d'un pointeur c'est l'adresse d'une autre variable ca reviens a passer l'autre variable par adresse.
 
Attention les tableaux sont en fait des pointeurs, ils ne sont pas copies. (on ne copie pas le tableau, mais l'adresse de celui-ci).
 
Mais tout ceci ne concerne que les appels de fonctions...

Reply

Marsh Posté le 27-03-2001 à 16:26:30    

Pour avoir l'adresse d'une variable, tu écris:
 
adresse=&variable
 
si ensuite tu veux écrie à cette adresse, tu écris:
 
*variable=new variable
 
Maintenant, si j'ai un conseil à te donner, c'est d'acheter le bouquin "Le language C", dans la collection "Le tout en poche", "Campus Press". C'est pas chère (65FF) et tu trouves bcp de chose.
Si tu as d'autres question, envoie moi un mail.
@+

Reply

Marsh Posté le 27-03-2001 à 16:31:13    

Je crois que justement il voulait s'arreter avant le pointeur.
 
Pour le bouquin, moi je conseille Le Language C de Kerighan & Richie chez Masson (pour la VF), il est tout noir, tu ne peut pas le rater, c'est le plus triste. mais un des mieux faits.

Reply

Marsh Posté le 27-03-2001 à 18:40:26    

ok merci les gars, je n'arrête pas de me cogner la tronche avec un maillet depuis le début de la journée
 
sur le maillet, y a écris "les paramètres d'une fonction sont transmises par valeur", j'ai mis une plombe à le graver
 
j'vous assure, ça marche, même que qd je me zieute dans la glace, je vois la phrase à l'envers sur mon front :o)
 
pour le livre, j'ai le langage C, norme Ansi de Kernighan & Ritchie, mais pour débuter, j'ai pris le C 1er langage par Claude Delannoy, très évolutif et rapidement assimilable mais je commencais juste à sécher sur cette notion de transmission de variable. Comme le cours suivant traite des pointeurs, fallait que je capte bien le truc
 
merci tout l'monde, bien sympatoches les gars
 
:) :) :)


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed