【问题标题】:C++ function input argument by reference vs by pointerC ++函数输入参数按引用与指针
【发布时间】:2017-07-13 21:58:31
【问题描述】:

我是 C++ 新手,之前只学过 MATLAB。

我的Q是关于以下函数的输入参数,它们通过值、引用和指针调用变量。

void SwapbyValue (int a, int b){
// Usual swapping code
}

void SwapbyRef (int &a, int &b){
// Usual swapping code
}

void SwapbyPoint(int *a,int *b){
//Usual swapping code
} 

由于我的 Q 不是关于上述函数如何工作,而是关于我如何调用它们,所以我省略了代码。所以,我知道当 i1 和 12 为 int 时,我们通过键入 SwapbyRef (i1,i2)、SwapbyRef (i1,i2) 和 SwapbyPoint(&i1,&i2) 来调用上述函数。

这让我对自己的生活感到困惑。好的,我知道第一个函数接受值并且有意义。但是在第二个中,仅通过 i1 和 i2 调用没有意义,因为在定义函数时,我们将其输入设置为 &a 而不仅仅是 a 但它仍然运行。同样在第三个中,我们将输入参数设置为一个指针,即*a,但我们在调用它时传递了一个地址&a(如0x7956a69314d8)。

为什么当我们向函数传递错误类型的输入时它会运行? 例如,一个 Matlab 类比,它看起来像将一个 char 传递给一个 int 函数。帮助!

【问题讨论】:

    标签: c++ function pointers


    【解决方案1】:

    int &a 是对 int 的引用,意思是,它将接受所有已经存在的 int 变量。例如,您不能做的是 SwapbyRef(4, 5) 使用 SwapbyRef (int &a, int &b),因为 4 和 5 是临时整数,不作为变量存在于内存中的某处。

    顺便说一句,您可能应该只查找 c++ 中的引用是什么。我认为这对你的帮助最大。

    【讨论】:

    • 谢谢。这个例子帮助我理解了。我发现对象的地址和引用相当模糊。
    • @DeKonTiki 还有一点要记住的是,使用指针作为参数,当该值发生变化时,它不仅在函数内发生变化,而且在函数上下文之外也发生了变化!这就是您将地址传递给函数 (&i1) 的原因。
    猜你喜欢
    • 1970-01-01
    • 2013-10-12
    • 2011-06-17
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多