What is void** in C#?

五迷三道 提交于 2019-12-19 05:46:13

问题


I'm looking through the source of a C# program that uses a library written in C. I came across this line and was unsure what it was:

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

What is an object of type void **? I did some Google searches and could only find information about void*, which is a pointer to a sort of catch all top level type, if I understood correctly.


回答1:


It's a pointer to a pointer to something not specified. Basically, just think of it as a memory pointer to a raw memory pointer.

So, int** is a pointer to a pointer to an int, but void** is a pointer to a pointer, but it's not specified what that pointer is pointing at.

I did some google searches and could only find information about void*, which is a pointer to a sort of catch all top level type, if I understood correctly.

Not quite. void* is a pointer to something, it's just not specified what that something is and should just be thought of as a pointer to a raw hunk of memory that you have to apply some structure to. For example, malloc returns a void* because it's returning a pointer to a raw hunk of memory.




回答2:


It's a void pointer. See this article for details:

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

And you can take a look at this SO question for details on how to implement it in C#:

How to declare a void pointer in C#

On a side note, that method should be marked as unsafe if it's not.




回答3:


In this case, I am guessing this library will allocate the amount of memory necessary to hold the image so it needs a double indirection so it can change the address lpImageBits points to.




回答4:


In C, it represents a pointer to a void* object. In other word, when you dereference it you get a void*.

I guess this is used because lpImageBits will be modified inside the function you are invoking.




回答5:


That's not C#. It looks like C++. In that case, a void** is a pointer to a void pointer.



来源:https://stackoverflow.com/questions/7205541/what-is-void-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!