(void**)&x和(void*)x之间有什么区别?

Pri*_*hna 1 c pointers cuda gpgpu gpu-programming

(void**)&x和(void*)x之间有什么区别?我会给你一些代码,请帮帮我.

float *xd;
int size=width*width*size(float);
cudaMalloc((void **)&x,size); 1
cudaMalloc((void *)x,size);   2
cudaMalloc(&x,size);          3
cudaMalloc(*x,size);          4

cudaFree(xd);
Run Code Online (Sandbox Code Playgroud)

我只想知道其中的区别.

cudaMalloc()函数的第一个参数是指针变量的地址,该变量必须在分配后指向分配的对象.指针变量的地址应该转换为(void**),因为函数需要一个通用指针值; 内存分配函数是一个通用函数,不限于任何特定类型的对象.此地址允许cudaMalloc()函数将已分配对象的地址写入指针变量.3 cudaMalloc()函数的第二个参数以字节为单位给出要分配的对象的大小.第二个参数的使用与C malloc()函数的size参数一致.

Kei*_*son 6

它们几乎完全不同.

这个:

(void **)&x
Run Code Online (Sandbox Code Playgroud)

获取地址x并将其转换为void**(指向指针的指针void).

这个:

(void *)x
Run Code Online (Sandbox Code Playgroud)

x并将其转换为void*.

它们都是指针,但是它们指向内存中完全不同的位置(除非x碰巧包含它自己的地址),并且它们是不同类型的.

如果您想向我们展示代码,向我们展示实际编译的代码会很有帮助.复制并粘贴您的实际源代码; 不要重新输入它.你没有向我们展示x(是xd一个拼写错误x?)的声明,并且size(float)是一个语法错误(你的意思是sizeof(float)?).