第一个代码:
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'函数中的'&'字符。但是有人可以解释一下我,在这种情况下会做什么?
答案 0 :(得分:5)
我知道它的作用,但是在第二个代码中它与*组合在一起,我不知道这种组合的含义
T&
表示“对T
的引用”。
现在将T
替换为您喜欢的任何内容。例如,对于指向int
,T==int*
的指针,我们有int*&
,它是对指向int
的指针的引用。
将非指针传递给引用作为函数没有什么不同。按值传递ptr
时,func
处理副本,而按引用func
传递的实例处理副本。
答案 1 :(得分:1)
按引用传递和按值传递之间的区别在于,对被调用函数中的按引用传递的参数进行的修改在调用函数中有效,而对按值传递的参数在被调用函数中进行的修改函数不能影响调用函数。如果要在调用函数中修改参数值,请使用传递引用。否则,请使用按值传递来传递参数。
我认为这比我能做到的更好。