参数既是指针又是引用?

Parameter both a pointer and reference?

我正在检查一个作业,我刚刚在一个头文件中找到了它,我必须在 .cpp 中填写它:

void setData(const component_t * & data_ptr); // Copy the data from data_ptr to the internal buffer. 
//The function ASSUMES a proper size for the incomming data array.

如果您想知道 component_t,它是通过 typedef.

浮动的

所以,我的问题是,data_ptr是个什么样的参数?它怎么能同时被*和&定义(既是指针又是引用?)。

感谢您的见解!

参数data_ptr是对指向const component_t的指针的引用。

在 C 和 C++ 中,指针并不是很特殊。它只是一个指向内存中地址的数字。通常,当您将 T* 作为参数传递时,您是按值 传递 ;也就是说,代表内存地址的数字只是被复制了,就好像你按值传递了一个int一样。

在这种情况下,您传递的是 T*& 或指向 T 的指针的引用。但它的工作方式与传递 int& 或对 int 的引用大致相同:这意味着您可以更改引用的对象。

所以在这种情况下你可以说,例如

void setData(const component_t * & data_ptr)
{
    data_ptr = new component_t(/* args... */);
}

尽管这不一定是现代 C++ 中做事的好方法。