C++中使用&和*声明的函数参数之间的差异

Difference between function arguments declared with amp; and * in C++(C++中使用amp;和*声明的函数参数之间的差异)
本文介绍了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,因为我无法读出f2x的地址,所以了解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++中使用&amp;和*声明的函数参数之间的差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Boost module machine type #39;X86#39; conflicts with target machine type #39;x64#39;(Boost模块计算机类型#39;x86#39;与目标计算机类型#39;x64#39;)
Trouble running LLVM examples(运行LLVM示例时出现问题)
Linker error while linking some windows APIs(链接某些Windows API时出现链接器错误)
Python ctypes, C++ object destruction(Python ctype,C++对象销毁)
DllGetClassObject return amp;quot;No such interface supportedamp;quot; while CoCreateInstance can find it successful(DllGetClassObject返回amp;不支持这样的接口,而CoCreateInstance发现它成功了)
Is static_castamp;lt;doubleamp;gt;(std::nanf(amp;quot;amp;quot;)) well defined?(Static_castamp;lt;doubleamp;gt;(std::nanf(amp;quot;amp;quot;))是否定义良好?)