En gros il y a deux raisons qui peuvent te pousser à vouloir passer des paramêtres par références :
- Ton paramêtre est trop gros, il est plus économique de passer un pointeur vers ce paramêtre. C'est à la fois plus rapide puisque tu n'as pas à recopier toute ta structure dans la pile, est plus économique (ça prend sizeof(ma_struct *), soit 4 ou 8 suivant l'archi, au lieu de sizeof(ma_struct), qui peut être énoooorme).
- Tu veux pouvoir modifier, dans la fonction appelée, des variables utilisées dans la fonction appelante. Puisque tu passe un pointeur (l'adresse en mémoire de ton paramêtre), tu peux modifier la vrai valeur dans la fonction appelante.
Evidemment il faut faire gaffe à ne pas modifier par erreur une valeur passée en référence. Si on utilise un passage par référence pour raison d'économie seulement, on sera bien inspiré de mettre des "const" dans la déclaration de fonction, pour éviter les bêtises. On écrira donc void func(const mon_type_t *arg), qui évite de modifier par erreur la valeur pointée par arg (erreur à la compilation si c'est le cas).
Ca c'était du C, en C++ il y a un "sucre de syntaxe" qui fait qu'on peut faire du passage par référence sans rien faire de spécial au moment de l'appel (on appelle func(arg), on n'a pas à faire func(&arg)). C'est du vrai passage par référence, et personellement je trouve ça très confusionant puisqu'à l'appel on ne sait pas vraiment ce qu'on fait. Il faut aller voir la déclaration de la fonction pour savoir si le paramêtre est passé par valeur ou référence.
Message édité par matafan le 23-01-2003 à 15:41:06