我对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 ++,您只能取消引用指针(或其类型重载operator*的对象,而不是您的情况)。

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

10-06 05:27
查看更多