Ich schaue mir die Quelle eines C # -Programms an, das eine in C geschriebene Bibliothek verwendet. Ich bin über diese Zeile gestolpert und war mir nicht sicher, was es war:
%Vor% Was ist ein Objekt vom Typ void **
? Ich habe einige Google-Suchen durchgeführt und konnte nur Informationen über void*
finden, was ein Zeiger auf eine Art Catch aller Top-Level-Typen ist, wenn ich das richtig verstanden habe.
Es ist ein Zeiger auf einen Zeiger auf etwas, das nicht angegeben ist. Betrachten Sie es einfach als Speicherzeiger für einen rohen Speicherzeiger.
Also ist int**
ein Zeiger auf einen Zeiger auf ein int
, aber void**
ist ein Zeiger auf einen Zeiger, aber es wird nicht angegeben, auf was der Zeiger zeigt.
Ich habe einige Google-Suchen durchgeführt und konnte nur Informationen über void * finden, was ein Zeiger auf eine Art catch aller Top-Level-Typen ist, wenn ich das richtig verstanden habe.
Nicht ganz. void*
ist ein Zeiger auf etwas, es ist einfach nicht spezifiziert, was das ist und sollte nur als ein Zeiger auf ein rohes Stück Speicher gedacht werden, dem Sie eine Struktur zuweisen müssen. Zum Beispiel gibt malloc
ein void*
zurück, weil es einen Zeiger auf ein rohes Stück Speicher zurückgibt.
Es ist ein ungültiger Zeiger. Siehe diesen Artikel für Details:
Sie können sich diese SO-Frage genauer ansehen, um zu erfahren, wie Sie sie in C # implementieren können:
Deklarieren eines ungültigen Zeigers in C #
Nebenbei bemerkt, sollte diese Methode als unsicher markiert werden, wenn dies nicht der Fall ist.
In diesem Fall rate ich, dass diese Bibliothek die Menge an Speicher zuweist, die notwendig ist, um das Bild zu halten, so dass es eine doppelte Indirektion benötigt, damit es die Adresse lpImageBits
-Punkte ändern kann.