我最近尝试从https://www.udacity.com/course/viewer#!/c-cs344/l-55120467/m-67895450
学习CUDA C语言的并行编程cudamalloc((void**) &d_in, ARRAY_BYTES);
有人可以解释(void **)& d_in中发生的事情。如果有人可以给我参考一些链接或告诉我好书,我可以学习这种高级C,我们将非常感激。
答案 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);
只会将指向特殊数据类型的指针的地址覆盖到指向最常规数据类型的指针的地址。