c++ - 参数通过引用传递给指针问题

标签 c++ pointers reference arguments

每次我尝试编译我的代码时都会出现错误:

cannot convert parameter 1 from 'int *' to 'int *&'

测试代码如下所示:

void set (int *&val){
   *val = 10;
}

int main(){
   int myVal;
   int *pMyVal = new int;
   set(&myVal); // <- this causes trouble
   set(pMyVal); // <- however, this doesn't
}

我想一次调用该函数,而不是在某处创建一个指针来传递它。由于指针没有构造函数,因此无法完成类似的操作:set(int*(&myVal));

有没有其他方法可以通过引用传递指针而不需要创建临时变量?

编辑:顺便说一句,我知道为什么代码无法编译(我只是传递可能是 int 而不是实际指针的地址)。问题是它还能如何完成。

最佳答案

对非常量的引用不能绑定(bind)到右值。 & 运算符的结果是一个右值。看看the difference between lvalues and rvalues或阅读 a good C++ book .

此外,在您的上下文中,您不需要通过引用传递。以下也可以:

void set (int *val){
   *val = 10;
}

如果您要执行此类操作,则需要引用资料;

void set (int*& val){
   val = new int; //notice, you change the value of val, not *val
   *val = 10;
}

关于c++ - 参数通过引用传递给指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7308384/

相关文章:

c++ - C++ 中的 Python : Unresolved external

有人可以解释一下以下代码中如何将内存分配给双指针吗

c++ - 从临时对象返回左值引用

c++ - 汽车和引用

c++ - 我应该用 &this 做什么?

填充 vector 的 C++ 有状态仿函数

c++ - 什么时候static_casting ceil的结果会妥协?

c++ - 'for' 循环与 C++ 中 Qt 的 'foreach'

c - 为什么数组的地址等于它在 C 中的值?

c - 条件表达式中未计算的指针是否会变为 void?