Was ist void ** in C #?

8

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.

    
user12345613 26.08.2011, 13:41
quelle

5 Antworten

17

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.

    
jason 26.08.2011, 13:44
quelle
2

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.

    
James Johnson 26.08.2011 13:47
quelle
1

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.

    
Vinicius Kamakura 26.08.2011 13:44
quelle
1

In C stellt es einen Zeiger auf ein void* -Objekt dar. Mit anderen Worten, wenn Sie es dereferenzieren, erhalten Sie void* .

Ich nehme an, dass dies verwendet wird, da lpImageBits innerhalb der von Ihnen aufgerufenen Funktion geändert wird.

    
Simone 26.08.2011 13:45
quelle
0

Das ist nicht C #. Es sieht wie C ++ aus. In diesem Fall ist ein void** ein Zeiger auf einen ungültigen Zeiger.

    
Jez 26.08.2011 13:44
quelle

Tags und Links