【问题标题】:Can someone explain what is this (void**) &d_in?有人能解释一下这是什么(void**)&d_in 吗?
【发布时间】:2014-03-05 22:51:53
【问题描述】:

我最近正在尝试从https://www.udacity.com/course/viewer#!/c-cs344/l-55120467/m-67895450学习CUDA C语言的并行编程

cudamalloc((void**) &d_in, ARRAY_BYTES);

谁能解释一下 (void**) &d_in 中发生了什么。如果有人能给我一些链接的参考或告诉我可以在哪里学习这种高级 C 的好书,我将不胜感激。

【问题讨论】:

标签: c cuda parallel-processing


【解决方案1】:

其实是纯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 *) 的指针能够指向任何数据类型。因此,在您的语句 cudamalloc((void**) &d_in, ARRAY_BYTES); 中应用覆盖 (void **) 只会将指向特殊数据类型的指针的地址覆盖为指向最通用数据类型的指针的地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 2019-10-24
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多