这个问题在这里已经有了答案:
Reference to a pointer
(3 个回答)
2年前关闭。
这两个函数声明有什么区别?我意识到按值调用和按指针调用之间存在差异。
void foo(int* p); // Call by value to pointer
void func(int*& p); // Call by reference to pointer
r-value 到 l-value 绑定(bind)或类似的东西之间也有什么区别。
最佳答案
What are the differences between these two function declarations?
理论上,所有关于按值传递和按引用传递的规则仍然适用,即:
这些东西在指针的上下文中仍然适用。唯一需要记住的是“原始值”是指针本身 - 而不是它指向的对象。
void foo(int* p); // Call by value to pointer
对
p
的更改本身不影响原p
从来电者那里。所以如果你这样做
++p
里面 foo
它会在函数内推进指针,同时保持原始指针不变。void func(int*& p); // Call by reference to pointer
对
p
的更改里面 func
会影响来自调用者的原始指针。所以如果你这样做
*(++p) = 5;
里面 func
它会推进指针。并假设它仍然指向调用者中有效的东西,这将使 p
指向的值在调用者中也等于 5。
关于c++ - 值调用和指针引用调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59014722/