【问题标题】:Parameter both a pointer and reference?参数既是指针又是引用?
【发布时间】:2015-11-27 10:42:23
【问题描述】:

我正在检查一个作业,我刚刚在一个头文件中找到了这个,我必须在一个 .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 是一个什么样的参数?它怎么能被 * 和 & 定义(指针和引用?)。

感谢您的见解!

【问题讨论】:

标签: c++ pointers parameters reference


【解决方案1】:

参数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++ 中做事的好方法。

【讨论】:

  • 谢谢。我会用一根十英尺长的杆子来测量距离并远离它;)但是有没有一个地方特别有用,如果没有它我们就不能做事?
  • @sjsam int readint(char *& bufp) {int x = *bufp++; x <<= 8; x |= *bufp++; x <<= 8; x |= *bufp++; x <<= 8; x |= *bufp++; return x;} 或类似的东西。它在构建int 时遍历缓冲区更新指向缓冲区的指针。最后,你已经组装好了int,并且 bufp 指向缓冲区中int 之后的下一个位置。
  • 谢谢特里斯坦。欣赏这一点。
  • 很好的答案和澄清特里斯坦。非常感谢你的朋友。 :)
猜你喜欢
  • 2017-09-08
  • 2018-01-28
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多