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++中使用&;和*声明的函数参数之间的差异
基础教程推荐
- 为什么我们不能使用“虚拟继承"?在 COM 中? 2022-01-01
- C++:获取传递给函数的多维数组的行大小 2021-01-01
- 如何部分禁用 cmake C/C++ 自定义编译器检查 2021-01-01
- 将不可复制的闭包对象传递给 std::function 参数 2021-01-01
- 提升 ASIO 流缓冲 2021-01-01
- 与 CAS 的原子交换(使用 gcc 同步内置函数) 2022-01-01
- 随机插入/删除的综合向量与链表基准 2022-01-01
- 如何更改 SysDateTimePick32 或 CDateTimeCtrl 的背景颜色? 2022-01-01
- c++ STL设置差异 2022-01-01
- 如何在 C++ 中正确使用命名空间? 2022-01-01
