有人可以解释这是什么(无效**)& d_in?

时间:2014-03-05 22:51:54

标签: c cuda parallel-processing

我最近尝试从https://www.udacity.com/course/viewer#!/c-cs344/l-55120467/m-67895450

学习CUDA C语言的并行编程
cudamalloc((void**) &d_in, ARRAY_BYTES);

有人可以解释(void **)& d_in中发生的事情。如果有人可以给我参考一些链接或告诉我好书,我可以学习这种高级C,我们将非常感激。

1 个答案:

答案 0 :(得分:2)

实际上,这是纯粹的C / C ++问题。这个func(&pointer);表示您传递的变量&的地址(pointer)实际上可能是指针。因此,如果变量指针声明为int *pointer,则表达式&pointer的类型为int **,函数必须为any_type func(int **p)类型

然而,cudaMalloc函数有以下类型:

cudaError_t cudaMalloc(void **d evPtr, size_t size)

它表示第一个参数必须是void **类型。类型void在C / C ++中具有特殊重要性,而指向void(void *)的指针可以指向任何数据类型。因此,在语句(void **)中应用overcast cudamalloc((void**) &d_in, ARRAY_BYTES);只会将指向特殊数据类型的指针的地址覆盖到指向最常规数据类型的指针的地址。