【问题标题】:Pointer Confusion with C++与 C++ 的指针混淆
【发布时间】:2014-11-18 09:59:19
【问题描述】:

我对 c++ 指针和引用运算符感到非常困惑。我的主要困惑是以下(简单)代码:

#include <iostream>

using namespace std;

void changeInt(int &a)
{
    a *= 3;
}

int main()
{
    int n = 3;
    changeInt(n);
    cout << n << endl; 

    return 0;
}

主要是,我对为什么更改地址 (&a) 会更改实际变量 (n) 感到困惑。当我第一次尝试这个问题时,这是我的代码:

#include <iostream>

using namespace std;

void changeInt(int &a)
{
    *a *= 3;
}

int main()
{
    int n = 3;
    changeInt(n);
    cout << n << endl; 

    return 0;
}

但这给了我一个错误。为什么更改地址时变量会更改,但更改地址指向的值时却报错?

【问题讨论】:

    标签: c++ function pointers data-manipulation


    【解决方案1】:

    您的第二个示例不是有效的 C++,您只能取消引用指针(或类型重载 operator* 的对象,这不是您的情况)。

    您的第一个示例通过 reference 传递参数(int &amp;a 不是“a 的地址”,它是对 a 的引用),这就是为什么对 a 的更改确实是对函数传递的对象的更改(在您的情况下,n

    【讨论】:

    • @Asad-ullahKhan :不,它没有:该页面讨论了 &amp; 运算符,但您没有使用它(您正在声明参考,int &amp;
    • 哦,这更有意义!谢谢你!
    • @Asad-ullahKhan 在代码中:int a = b &amp; c; 你不认为c 的地址对 b 有什么作用吗?
    【解决方案2】:

    在该上下文中的 & 符号 (&amp;) 表示 引用,而不是“地址”。例如:

    int some_int;
    
    int & a = some_int; // Declare 'a', a reference to 'some_int'
    
    int * p = &some_int; // '&' in this context is "the address of" 'some_int'
    

    引用在许多方面都等同于指针,但它的行为类似于值类型。 请参阅this threadwikipedia entry 了解更多信息。

    【讨论】:

      【解决方案3】:

      & 符号表示变量通过引用传递给您的函数——但在函数内部,变量被视为按值传递。这是syntactic sugar,让编写接受引用的代码更容易理解。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-25
        • 2011-09-04
        • 2016-11-08
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2011-08-15
        • 1970-01-01
        相关资源
        最近更新 更多