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



第一个代码:

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"函数中的字符。但有人能解释一下,在这种情况下它会做什么吗?

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

T&表示"对T的引用"。

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

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

&表示通过引用传递:

按引用传递和按值传递之间的区别在于,对被调用函数中按引用传递的参数所做的修改在调用函数中有效,而对被调用功能中按值传递的参数的修改不会影响调用函数。如果要修改调用函数中的参数值,请使用传递引用。否则,请使用pass-by-value传递参数。

我觉得这比我能说的要好。

最新更新