变量类型后面的 "&" 符号含义

45

你可以在这里找到已经详细回答的形式的信息:https://dev59.com/VHVD5IYBdhLWcg3wL4mM。 - chris
表现得像正常的吗?你尝试过 af(v); af(v); 吗? - Karoly Horvath
9
这是一份参考资料,如果你不知道它是什么,我强烈建议你阅读一本C++书籍。 - Matteo Italia
一个链接:http://codepad.org/1jTOscE8 - Johannes Schaub - litb
2个回答

37

这意味着你正在通过引用传递变量。

实际上,在类型声明中,它表示引用,就像:

int x = 42;
int& y = x;

声明一个引用到x,名为y


23

&表示函数接受变量的地址(或引用),而不是变量的

例如,注意以下代码的区别:

void af(int& g)
{
    g++;
    cout<<g;
}

int main()
{
    int g = 123;
    cout << g;
    af(g);
    cout << g;
    return 0;
}

而这个(不带 &):

void af(int g)
{
    g++;
    cout<<g;
}

int main()
{
    int g = 123;
    cout << g;
    af(g);
    cout << g;
    return 0;
}

10
& 符号表示函数接受地址作为参数。嗯,不对...(The & means that the function accepts the address... ummm... no...) - Luchian Grigore
只是指出void main - chris
void main() 没有问题。当然,我假设这是不完整的代码(他也错过了 "#include"),所以他的 void main 周围会有一个 namespace lulz { ... } - Johannes Schaub - litb
更新了 mainint main,以让 Chris 开心 ;)而且 @LuchianGrigore:实际上,该函数确实接受地址。如果你在 af() 内外都使用 printf("%x",&g);,你会发现这两个值是不同的(至少在我使用 gcc 编译时...)。编译器实际上正在复制内存地址并将其传递给函数;在栈上确实存在另一个对象,信不信由你(再次声明,至少在我使用 gcc 时是这样的...) - cegfault
从概念上讲,它传递的是对象的引用而不是副本和值,但实际上在使用gcc编译器时,它会复制内存地址并将其传递。 - cegfault
2
那么你的意思是说你可以这样调用函数:af(&g),对吗?因为&gg的地址,而且你说过af接受一个变量的地址。 - Luchian Grigore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接