C++中使用&;和*声明的函数参数之间的差异
我键入了以下示例:
#include <iostream>
double f(double* x, double* y)
{
std::cout << "val x: " << *x << "
";
std::cout << "val y: " << *y << "
";
return *x * *y;
}
double f2(double &x, double &y)
{
std::cout << "val x: " << x << "
";
std::cout << "val y: " << y << "
";
return x * y;
}
int main()
{
double a, b;
a = 2;
b = 3;
std::cout << f(&a, &b) << "
";
std::cout << f2(a, b) << "
";
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,这非常useful
我觉得(据我现在所知,这是一种主题品味的形式)使更清楚
解决方案
f2
通过引用获取其参数,这本质上是您传递的参数的别名。指针和引用的区别在于引用不能为空。对于f
,您需要传递要传递给指针的参数的地址(使用&;运算符),当您通过引用传递参数时,只需传递参数即可创建别名。
传递常量引用(const double& ref
)在您不打算更改函数内部的参数时是首选的,并且当您要更改它们时,使用非常量引用。
指针主要用于需要能够将NULL
传递给参数的情况,显然,在使用它之前,您需要在函数内部检查指针是否不是NULL
。
相关文章