Difference between function arguments declared with amp; and * in C++(C++中使用amp;和*声明的函数参数之间的差异)
问题描述
我键入了以下示例:
#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
。
这篇关于C++中使用&;和*声明的函数参数之间的差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C++中使用&;和*声明的函数参数之间的差异


基础教程推荐
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 常量变量在标题中不起作用 2021-01-01
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 这个宏可以转换成函数吗? 2022-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 我有静态或动态 boost 库吗? 2021-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01