[英]Pointer Confusion with C++
我对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
)
在此上下文中,“& &
表示参考 ,而不是“地址”。 例如:
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'
引用在许多方面等效于指针,但其行为类似于值类型。 请参阅此主题和Wikipedia条目以了解更多信息。
“与”号表示变量是通过引用传递给您的函数的-但在函数内部,该变量被视为按值传递。 这是语法糖 ,使接受引用的代码更易于理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.