CUDA编程:关于二重指针(void**)
由于cuda中等函数,例如cudamalloc等均使用用参数返回值,函数本身返回error等信息。因此在传参时,要传入地址。
int * devc=0
errormsg=cudaMalloc((void**)&dev_c, size * sizeof(int));
上述代码中,想使用dev_c来保存cudamalloc后的地址。采用c语言参数返回值的办法,应该传入devc的地址。,因此采用**,并进行类型转换。
void test1(int* p)
{
//相当于复制了一个p=a,p也指向a所指的地方
p = (int*)malloc(100);
//对p进行修改并不会影响a,无法起到返回值的作用
}
void test2(void** p)
{
//p为a的地址,*p相当于直接对a进行修改
*p = malloc(100);
}
int main()
{
int* a=num0;
test1(a);
test2((void**)&a);
}