指向引用参数的指针

Pointer to a reference parameter

本文关键字:指针 参数 引用      更新时间:2023-10-16

可能的重复项:
函数参数类型后跟 *&

我现在正在查看别人的代码,并看到了一个不寻常的(至少对我来说)函数声明语法。以下C++语法是否有效?

bool Foo::Bar(Frame *&ptoframe, int msToBlock)
{
    ....
}

我认为开发人员正在尝试声明指向引用的指针。

感谢您的帮助

是的,它是有效的。从右到左阅读语法:它是对指针的读取引用。如果您希望更改传递给函数的指针,这一点很重要。指针通过引用有效地传递,就像任何其他参数一样。

这里有一个很好的例子:

void no_change(int * ptr) {
    ptr = 0;
}
void change_ptr(int *& ptr) {
    ptr = 0;
}
int main() {
    int *x;
    change_ptr(x);
}

传递给change_ptr的任何指针的值都将更改,因为我们是通过引用传递它的。

但请注意,指针指向的对象的值仍可以通过no_change函数(即 *ptr = new int )进行更改。此语法仅适用于实际指针,不适用于其指向的对象。

不,第一个函数参数是对指针的引用。有时你想改变别人的指针...即:

void change_my_char(char & c)    { c = 'x';     }
void pimp_my_pointer(void * & p) { p = nullptr; }
int main() {
  char x;
  void * y;
  change_my_char(x);
  pimp_my_pointer(y);
}

它是通过引用传递的指针。这允许被调用方更改调用方指针的值。