指针语法问题的指针

时间:2011-08-24 16:35:18

标签: c++ cuda

假设我有以下内容:

void init_gpu(cuComplex* d_hhBuff)
{   
    cutilSafeCall(cudaMalloc((void **)&d_hhBuff, memsize));
}

我称之为

cuComplex *my_buff;
init_gpu(my_buff);

好吧,当init_gpu返回时,它没有指向cudaMalloc分配的设备内存。

如何修改这个以便init_gpu的调用者将my_buff指向cudaMalloc创建的修改后的d_hhBuff?

3 个答案:

答案 0 :(得分:6)

问题是你是按值传递指针。将功能标题更改为

void init_gpu(cuComplex *& d_hhBuff)

答案 1 :(得分:2)

您的d_hhBuf是本地副本。你应该做的是通过引用传递指针:

void init_gpu(cuComplex * & d_hhBuff)

答案 2 :(得分:0)

假设你输入type:

typedef cuComplex* ComplexPointer;

写一个函数:

void ChangeComplex(ComplexPointer ptr)
{
   ptr = new cuComplex;
}

并称之为:

ComplexPointer cptr;
ChangeComplex(cptr);

通过查看通话和功能(以及知道typedef)可以推断出什么?你会说,ptrcptr)按值传递,而不是通过引用/指针传递,不会改变。

现在考虑这个电话:

cuComplex* ptr;
ChangeComplex(cptr);

这与上面完全相同,您实际上是传递类型ComplexPointer - 它只是通过值传递。

最后了解更改后的签名:

void ChangeComplex(cuComplex*ptr);

它仍然是相同的 - 您通过VALUE传递类型 cuComplex*,而不是通过引用!