繁体   English   中英

C ++的指针混淆

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM