双指针地址强制转换为void**

Address of double pointer cast to void**

本文关键字:void 转换 指针 地址      更新时间:2023-10-16

我正在搜索如何创建指针数组并将其复制到CUDA内存。我发现这篇文章CUDA双指针内存副本,但以下行在接受的答案

int ** devicePointersStoredInDeviceMemory;
cudaMalloc( (void**)&devicePointersStoredInDeviceMemory, sizeof(int*)*N);

让我有点烦。传递双指针的地址并将其强制转换为void**的意义是什么?&devicePointerStoredInDeviceMemoryint***不是一样的吗?为什么把它转换成void**而不是void***呢?

传递双指针的地址并将其强制转换为void**是什么意思?devicepointerstoredindevicemmemory不会与int***相同,所以为什么将其强制转换为void**而不是void***?

cudaMalloc函数的第一个参数是void **,所以如果我们要调用cudaMalloc,这就是我们需要的类型。第一个形参的作用是告诉codaMalloc将指向我们分配的内存的指针存储在哪里。

你也可以这样做:

void *j;
cudaMalloc(&j, sizeof(int*)*N); // stores result in j
int **devicePointersStoredInDeviceMemory = (int **) j;