我正在查看使用C编写的库的C#程序源代码。我遇到了这一行并且不确定它是什么:
cvbimUNSAFE.GetImageVPA ((cvbim.IMG)cvImg.Image, 0, (void**)&lpImageBits, &pVPAT);
什么是void **
类型的对象?我做了一些谷歌搜索,只能找到有关void*
的信息,如果我理解正确的话,这是指向所有顶级类型的指针。
答案 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*