为什么要更改这两个代码的输出中的“&”字符?

第一个代码:

int a = 1;

void func(int* ptr) {
    ptr = &a;
}

int main() {
    int nvar = 2;
    int* pvar = &nvar;
    func(pvar);
    std::cout << *pvar;
}
//Output: 2

第二个代码:

int a = 1;

void func(int*& ptr) {
    ptr = &a;
}

int main() {
    int nvar = 2;
    int* pvar = &nvar;
    func(pvar);
    std::cout << *pvar;
}
//Output: 1

唯一的区别是'func'函数中的'&'字符。但是有人可以解释一下我,在这种情况下会做什么?

nancy8888521 回答:为什么要更改这两个代码的输出中的“&”字符?

  

我知道它的作用,但是在第二个代码中它与*组合在一起,我不知道这种组合的含义

T&表示“对T的引用”。

现在将T替换为您喜欢的任何内容。例如,对于指向intT==int*的指针,我们有int*&,它是对指向int的指针的引用。

将非指针传递给引用作为函数没有什么不同。按值传递ptr时,func处理副本,而按引用func传递的实例处理副本。

,

&表示passing by reference

  

按引用传递和按值传递之间的区别在于,对被调用函数中的按引用传递的参数进行的修改在调用函数中有效,而对按值传递的参数在被调用函数中进行的修改函数不能影响调用函数。如果要在调用函数中修改参数值,请使用传递引用。否则,请使用按值传递来传递参数。

我认为这比我能做到的更好。

本文链接:https://www.f2er.com/3164105.html

大家都在问