J'ai tapé l'exemple suivant :
#include <iostream>
double f(double* x, double* y)
{
std::cout << "val x: " << *x << "\n";
std::cout << "val y: " << *y << "\n";
return *x * *y;
}
double f2(double &x, double &y)
{
std::cout << "val x: " << x << "\n";
std::cout << "val y: " << y << "\n";
return x * y;
}
int main()
{
double a, b;
a = 2;
b = 3;
std::cout << f(&a, &b) << "\n";
std::cout << f2(a, b) << "\n";
return 0;
}
Dans la fonction f
, je déclare x et y en tant que pointeurs dont je peux obtenir la valeur en utilisant *x
. Lors de l'appel de f
, je dois passer l'adresse de mes arguments passés, c'est pourquoi je passe &a, &b
. f2
est la même sauf que la définition est différente.
Maintenant ma question est : Sont-ils vraiment les mêmes en ce qui concerne la gestion de la mémoire ? Les deux ne font pas de copie de la valeur passée mais passent plutôt une référence ? Je me demande à propos de f2
car je n'ai pas pu lire l'adresse de x
dans f2sais plus sur x et y dans `f` (là je connais l'adresse ET la valeur).
``
Éditer : Après avoir fait des recherches supplémentaires, j'ai trouvé un sujet assez utile :
Pointeur vs Référence Il y a aussi un lien vers les directives de codage de google http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Reference_Arguments qui est assez utile
je trouve (comme je l'ai compris maintenant, c'est une forme de goût subjectif) pour être plus clair.
``