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

时间:2013-04-20 21:36:27

标签: c++ pointers parameters reference memory-address

为什么“Void”实际上会返回“6”?

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

int main () {

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

    return 0;
}

我不太明白这里发生了什么。使用Void(测试)我没有通过测试的地址。 为什么不“Void(&amp; test);”? 为什么ref ++在值5中加1?不应该是“* ref ++”吗?

5 个答案:

答案 0 :(得分:4)

int &ref = test;

ref被初始化为对变量test的引用。引用本质上是另一个对象的别名。尽管有熟悉的语法(即amersand & ),但取任何地址,在语义上, nothing 做指针。

答案 1 :(得分:2)

void Void (int &ref)
               ^
             this!

你是passing it by reference

答案 2 :(得分:2)

Void的参数类型为int&&中的int&是该类型的一部分。它使它成为一种参考类型。它与您可能用于获取对象地址的&无关。

由于参数类型是引用类型,传递给它的任何对象都是通过引用传递。这意味着函数内的ref引用了它之外的test对象。因此,ref++会对test产生影响。

这与您在类型中没有&并且按值传递时相反。这会将对象复制到函数中,而ref++只会影响副本。

答案 3 :(得分:1)

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

您通过reference传递了参数,因此ref内参数Void的任何更改都将直接应用于调用变量,即test,因为{ {1}}是对ref

的引用

答案 4 :(得分:0)

您通过引用传递它。当您在C ++中通过引用传递变量时,您不需要具有&amp;在争论之前。如果函数的参数是引用,则在函数调用时通过引用传递参数。