C++:将int地址作为参数传递

3
为什么返回值为"Void"的代码实际上会返回数值"6"?
void Void (int &ref){
    ref++;
}

int main () {

    int test= 5;
    Void(test);
    cout << test;  // is 6      

    return 0;
}

我不太理解这里发生了什么。使用Void(test)时,我没有传递test的地址。 为什么不是"Void(&test);"? 为什么ref++会将值5加1?不应该是"*ref++"吗?


1
当您使用“ref”时,意味着“*ref”。 - DGomez
2
@DGomez 不是的,Type &ident 表示引用,Type *ident 表示指针。 - user529758
那我为什么需要指针呢?只是为了存储地址吗? - user1511417
阅读有关动态数据结构的内容,如果你想了解一些指针的好东西。 - DGomez
http://cslibrary.stanford.edu/103/LinkedListBasics.pdf - DGomez
显示剩余2条评论
5个回答

5
int &ref = test;

ref 是被初始化为对变量 test 的引用。引用本质上是另一个对象的别名。尽管语法非常相似(即符号&),但这不是取任何地址,从语义上讲与指针毫无关系


4

2
Void的参数类型为int&,其中&是类型的一部分,它使其成为引用类型。它与您可能用于获取对象地址的&无关。由于参数类型为引用类型,因此传递给它的任何对象都是通过引用传递的。这意味着函数内部的ref指向外部的test对象。因此,ref++会影响test。相反,如果类型中没有&,则被复制到函数中的对象将作为值传递,ref++仅会影响副本。

1
void Void (int &ref){
   ref++;
}

你通过引用(reference)传递了参数,所以在Void中对参数ref所做的任何更改都会直接应用于调用变量,即在此情况下是test,因为ref是对test的引用。

0
你正在通过引用传递它。在 C++ 中,当你通过引用传递一个变量时,你不需要在参数前加 &。如果一个函数的参数是一个引用,那么在函数调用时你就通过引用传递参数。

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