我输入了以下示例:
#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
感到困惑,因为我无法读取f2
中x
的地址,所以我对f
中的x和y更加了解(在那里我知道地址和值)。编辑:经过进一步的研究,我找到了一个非常有用的主题:Pointer vs. Reference,其中还有一个链接到Google编码指南http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Reference_Arguments,我觉得这很有用(现在我理解了,这是一种主观口味),让我更清楚了解这个问题。