4

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

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

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

我认为开发人员正试图声明一个指向引用的指针。

谢谢您的帮助

4

3 回答 3

5

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

这是一个漂亮的例子:

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)更改。此语法仅适用于实际指针,而不适用于其指向的对象。

于 2012-12-18T22:23:19.833 回答
4

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

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);
}
于 2012-12-18T22:22:48.810 回答
4

这是一个通过引用传递的指针。这允许被调用者更改调用者指针的值。

于 2012-12-18T22:23:25.520 回答