可能重复:
函数参数类型后跟 *&
我现在正在查看其他人的代码,并看到了一个不寻常的(至少对我而言)函数声明语法。以下是有效的 C++ 语法吗?
bool Foo::Bar(Frame *&ptoframe, int msToBlock)
{
....
}
我认为开发人员正试图声明一个指向引用的指针。
谢谢您的帮助
可能重复:
函数参数类型后跟 *&
我现在正在查看其他人的代码,并看到了一个不寻常的(至少对我而言)函数声明语法。以下是有效的 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);
}
这是一个通过引用传递的指针。这允许被调用者更改调用者指针的值。