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.
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.In C, it represents a pointer to a
void*
object. In other word, when you dereference it you get avoid*
.I guess this is used because lpImageBits will be modified inside the function you are invoking.
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.
That's not C#. It looks like C++. In that case, a
void**
is a pointer to a void pointer.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 anint
, butvoid**
is a pointer to a pointer, but it's not specified what that pointer is pointing at.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 avoid*
because it's returning a pointer to a raw hunk of memory.