c++ - 函数声明中的 `*&` 是什么意思?

标签 c++ pointers reference

我按照这个思路写了一个函数:

void myFunc(myStruct *&out) {
    out = new myStruct;
    out->field1 = 1;
    out->field2 = 2;
}

现在在调用函数中,我可能会这样写:

myStruct *data;
myFunc(data);

这将填充 data 中的所有字段。如果我在声明中省略了 '&',这将不起作用。 (或者更确切地说,它只会在函数中本地工作,但不会改变调用者中的任何内容)

有人可以向我解释一下这个 '*&' 的实际作用吗?它看起来很奇怪,我无法理解它。

最佳答案

C++ 变量声明中的 & 符号表示它是 reference .

它恰好是对指针的引用,它解释了您所看到的语义;被调用函数可以改变调用上下文中的指针,因为它有一个对它的引用。

所以,重申一下,这里的“有效符号”不是 *&,这种组合本身并不意味着很多。 *myStruct * 类型的一部分,即“指向 myStruct 的指针”,而 & 使它成为引用,因此您可以将其读作“out 是对指向 myStruct 的指针的引用”。

在我看来,最初的程序员可以将其写成:

void myFunc(myStruct * &out)

甚至(不是我个人的风格,但当然仍然有效):

void myFunc(myStruct* &out)

当然,关于风格还有很多其他的看法。 :)

关于c++ - 函数声明中的 `*&` 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1426986/

相关文章:

c++ - 在 VS2012 中使用 sqrt 内在的堆栈运行时检查失败

c++ - 将随机整数写入文本文件而不重复

c++ - 评估(取消)引用运算符

c++ - C++ 引用的生命周期

c++ - 检查 std::vector 索引是否超出范围的最快方法是什么?

c - 在 C 中连接字符串指针时如何避免内存泄漏

C++ 动态对象数组

c++ - 指针/引用 *& 运算符重载

C++:取消引用实际上在做什么?

c++ - 对于 C++ 中的名称别名,应该优先使用而不是定义