2014-03-05 37 views
1

我最近試圖從https://www.udacity.com/course/viewer#!/c-cs344/l-55120467/m-67895450有人可以解釋這是什麼(void **)&d_in?

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

學習CUDA C語言並行編程可有人請解釋什麼是發生在(無效**)& D_IN。另外,如果有人可以給我參考一些鏈接或告訴我好書,我可以學習這種先進的C,那麼它將是非常感謝。

+1

http://stackoverflow.com/questions/7989039/use-of-cudamalloc-why-the-double-pointer我必須說我同意可怕的API設計。 – this

+0

可能的重複[爲什麼cudaMalloc()使用指針指針?](http://stackoverflow.com/questions/12936986/why-does-cudamalloc-use-pointer-to-指針) –

+0

如果你谷歌周圍,你我們將找到大量的資源來學習Web上的C或C++主題。 –

回答

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 *)的指針可以指向任何數據類型。因此,在您的語句cudamalloc((void**) &d_in, ARRAY_BYTES);中應用包絡(void **)只會將指向特殊數據類型的指針的地址覆蓋到指向最常用數據類型的指針的地址。

相關問題