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

Ric*_*lya 1 c++ pointers reference dereference

第一个代码:

int a = 1;

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

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

第二个代码:

int a = 1;

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

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

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

for*_*818 5

我知道它的作用,但是在第二个代码中它与*组合在一起,我不知道这种组合意味着什么

T&表示“对”的引用T

现在,T用您喜欢的任何东西替换。例如指向的指针intT==int*我们有int*&一个指向的指针的引用int

将非指针传递给函数作为引用没有什么不同。如果ptr是按值传递则func工作在一个副本,当通过引用传递func在传递的情况下工作。

  • @klutt,请不要那样做。我要投票给答案而不是我的名字 (2认同)