Bonjours,
pouvez vous m'expliquer quelle est la différence entre
etCode:
1
2 TYPE fonction (TYPE var1, TYPE var2);
avecCode:
1
2 TYPE fonction (TYPE* var1, TYPE* var2);
peut etre n'importe quel type.Code:TYPE
merci d'avance
Version imprimable
Bonjours,
pouvez vous m'expliquer quelle est la différence entre
etCode:
1
2 TYPE fonction (TYPE var1, TYPE var2);
avecCode:
1
2 TYPE fonction (TYPE* var1, TYPE* var2);
peut etre n'importe quel type.Code:TYPE
merci d'avance
L'étoile fait référence à la notion de pointeur.
Ce sont donc deux prototypes différents.
Non je parle pas de la notion de pointeur, ce que je veux viser à comprendre c'est la notion de passage par valeur et passage par référence et l'impacte sur la qualité du code!
Euh ....
En langage C, passage par adresse ne se fait que par pointeur.
Passage par copie :
Passage par adresse grace a des pointeurs.Code:
1
2 TYPE fonction (TYPE var1, TYPE var2);
Code:
1
2 TYPE fonction (TYPE* var1, TYPE* var2);
Quand a l'impact sur la qualité du code ... c'est difficile.
Disons que si tu veux modifier un type primitif, tu passe par adresse, sinon tu passe par copie.
On pourrai penser que le même raisonnement se tiendrai avec les tableau/structure and Cie.
Seulement, si la strucutre prend beaucoup de place memoire, la copie va etre longue et donc les performance du programme en prendront un coup.
Si les performance sont une des priorité, alors le mieux est de passer les structure par pointeur.
En effet, un pointeur ne vaudrat jamais que 4 octet, c'est insignifiant.
Le probleme est que si on veut passer une structure mais qu'on en veut pas la modifier, on est un peu coincer.
La methode pour s'en sortir est de passer la structure par adresse (afin de ne pas penaliser les performance) mais de rajouter le mot clé "const" afin de dire que la structure, meme passer par adresse ne peut etre modifiable.
Personnelement, j'applique cette regle simple :
Code:
1
2
3
4
5
6
7
8
9
10 Si la variable est de type primitif (int, char, double ...) Si je veux passer sans modifier Passage par valeur Sinon Passage par adresse Sinon Si je veux passer sans modifier Passage par adresse avec le mot clé const Sinon Passage par adresse
Le problème ne se pose pas en C, car tous les passages se font par valeur (autrement dit par copie).
Attention toutefois pour les tableaux, qui sont traîtres là-dessus.
Ca dépend du point de vue utilisé. Etant donné qu'un tableau est, à quelques exceptions près (--> FAQ), toujours convertie par le compilo en l'adresse de son premier élément, on peut dire qu'ils ne font pas exception à la règle évoquée par ssmario2. En effet le pointeur dans en quel le tableau a été converti sera passé par copie à la fonction ...
Ce qui est traitre, c'est de pouvoir autoriser la syntaxe tableau (surtout avec la taille!) dans les paramètres formels d'une fonction (traduction: les déclarations de paramètres).
Pour ça je suis d'accord, on aurait du interdire la spécification (inutile) de taille d'un tableau lorsque celui-ci se trouve en argument d'une fonction.