我对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
)