Я набрал следующий пример:
#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;
}
В функции f
объявляю x и y в качестве указателей, из которых я могу получить значение, используя *x
. При вызове f
мне нужно передать адрес моих переданных аргументов, поэтому я передаю &a, &b
. f2
то же самое, за исключением того, что определение отличается.
Теперь мой вопрос: они оба одинаково относятся к управлению памятью? Оба не делают никакой копии переданного значения, а вместо этого передают ссылку?
Я задаюсь вопросом о f2
, потому что я не смог прочитать адрес x
в f2
, чтобы я знал больше о x и y в f
(там я знаю адрес и значение).
Спасибо заранее!
Изменить. Хорошо, после нескольких исследований я нашел довольно полезную тему:
Указатель против ссылки
Там также есть ссылка на рекомендации по кодированию google http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Reference_Arguments, что довольно useful
Я чувствую (как я понял сейчас, это форма субъекта вкус), чтобы сделать более прозрачным