c#中的void**是什么?
本文关键字:是什么 void 中的 | 更新日期: 2023-09-27 18:06:56
我正在查看一个使用C语言编写的库的c#程序的源代码,我遇到了这一行,不确定它是什么:
cvbimUNSAFE.GetImageVPA ((cvbim.IMG)cvImg.Image, 0, (void**)&lpImageBits, &pVPAT);
什么是类型为void **
的对象?我做了一些谷歌搜索,只能找到关于void*
的信息,如果我理解正确的话,这是一个指向某种捕获所有顶级类型的指针。
这是一个指向未指定对象的指针的指针。基本上,把它想象成一个指向原始内存指针的内存指针。
所以,int**
是指向int
的指针的指针,但void**
是指向指针的指针,但它没有指定指针指向什么。
我做了一些谷歌搜索,只能找到关于void*的信息,如果我理解正确的话,这是一个指向某种捕获所有顶级类型的指针。
不完全是。void*
是指向某物的指针,它只是没有指定某物是什么,应该被认为是指向原始内存块的指针,你必须应用一些结构。例如,malloc
返回一个void*
,因为它返回一个指向原始内存块的指针。
这是一个void指针。详细信息请参阅本文:
http://msdn.microsoft.com/en-us/library/y31yhkeb%28VS.80%29.aspx关于如何在c#中实现它的细节,你可以看看这个问题:
如何在c#中声明void指针在这种情况下,我猜这个库将分配保存图像所需的内存量,因此它需要双间接,因此它可以更改地址lpImageBits
指向。
在C语言中,它表示指向void*
对象的指针。换句话说,当你对它解引用时,你会得到一个void*
.
我猜这是使用的,因为lpImageBits将在你调用的函数内修改
在c#中,void**
是指向void*
的指针。下面是一个简单的例子:
public unsafe static void Main(string[] args)
{
int x = 1;
void* v = &x;
//dereferencing v, it prints 1
Console.WriteLine(*(int*)v);
void** vtp = &v;
//dereferencing vtp, it prints 1
Console.WriteLine(*(int*)*vtp);
Console.ReadLine();
}
这不是c#。它看起来像c++。在这种情况下,void**
是指向void指针的指针。