c#中的void**是什么?

本文关键字:是什么 void 中的 | 更新日期: 2023-09-27 18:06:56

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

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

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

c#中的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指针的指针。