【发布时间】:2015-01-17 21:43:18
【问题描述】:
如果子程序分配了一个新的缓冲区,该函数的调用者如何传递一个指针来获取地址?
我尝试过的每个声明组合都不起作用,即在调用子例程后,传递的指针没有设置为在子例程中创建的缓冲区的地址。
int main ()
{
float *fMyBuffer;
// Pointer Update
readFloatData ( fMyBuffer ); // &fMyBuffer *fMyBuffer
// Deallocate Memory
delete [] fMyBuffer;
}
void readFloatData(float *&fBuffer) //*fBuffer &fBuffer
{
// Create New Buffer
float *fData;
fData = new float [1000];
// Pass our buffer Address to user's pointer
fBuffer = fData;
}
【问题讨论】:
-
如果对
float的引用是float*,那么对float *的引用是? -
@Sjuan 通常是个非常糟糕的主意? :-)
-
非常简单:1)函数签名:
void readFloatData(float **fBuffer) {...},2)函数调用:readFloatData (&fMyBuffer );,3)删除“readFloatData():”中的所有(现在无关的)内容。 -
我唯一能看出你发布的代码有问题的是你在声明之前调用了一个函数。
-
谢谢,应该提到,为了清楚起见,我省略了一些细节,比如函数原型声明部分。此外,虽然函数通常返回句柄,但我的实际函数需要返回 2 个指针地址,所以这就是我想将其作为参数的原因。虽然,我敢打赌有一种方法可以返回多个指针(使用向量/unique_ptrs),但是我对这些类型不是很熟悉。
标签: c++ pointers reference pass-by-reference