什么是C#中的void **?

时间:2011-08-26 13:41:50

标签: c# c pointers void

我正在查看使用C编写的库的C#程序源代码。我遇到了这一行并且不确定它是什么:

cvbimUNSAFE.GetImageVPA ((cvbim.IMG)cvImg.Image, 0, (void**)&lpImageBits, &pVPAT);

什么是void **类型的对象?我做了一些谷歌搜索,只能找到有关void*的信息,如果我理解正确的话,这是指向所有顶级类型的指针。

6 个答案:

答案 0 :(得分:18)

它是指向未指定内容的指针。基本上,只需将其视为指向原始内存指针的内存指针。

因此,int**是指向int的指针,但void**是指向指针的指针,但未指定该指针指向的是什么。

  

我做了一些谷歌搜索,只能找到有关void *的信息,如果我理解正确的话,这是指向所有顶级类型的指针。

不完全。 void*是一个指向某事物的指针,它只是没有指定那个东西是什么,应该只是被认为是指向你必须应用某些结构的原始大块内存的指针。例如,malloc返回void*,因为它返回指向原始内存块的指针。

答案 1 :(得分:2)

这是一个无效指针。有关详细信息,请参阅此文章:

http://msdn.microsoft.com/en-us/library/y31yhkeb%28VS.80%29.aspx

您可以查看此SO问题,了解有关如何在C#中实现它的详细信息:

How to declare a void pointer in C#

另外,如果不是,那么该方法应该被标记为不安全。

答案 2 :(得分:1)

在这种情况下,我猜这个库将分配保存图像所需的内存量,因此它需要双间接,因此它可以将地址lpImageBits更改为。

答案 3 :(得分:1)

在C中,它表示指向void*对象的指针。换句话说,当你取消引用它时,你得到一个void*

我猜这是因为lpImageBits将在你调用的函数内修改。

答案 4 :(得分:0)

那不是C#。它看起来像C ++。在这种情况下,void**是指向void指针的指针。

答案 5 :(得分:0)

在C#中,let layerGroup = L.featureGroup(); ... // add multiple layers layerGroup.addLayer(L.geoJson(feature)) ... leafletMap.addLayer(layerGroup); leafletMap.fitBounds(layerGroup.getBounds()); 是指向void**的指针。这是一个简单的示例:

void*