Zeiger auf void an Funktion übergeben - irgendetwas funktioniert nicht
-
int Init(void* data) { if (data!=NULL) return 1; komplizierter_typ_dat* p = new komplizierter_typ_dat; cerr << "data = NULL ? " << (data==NULL) << endl; cerr << "komplizierter_typ_dat = NULL ? " << (komplizierter_typ_dat==NULL) << endl; data = pgfai_btm_dat; return 0}Hauptprogramm:
void* data=NULL; cerr << "data = NULL ? " << (data==NULL) << endl; int init_result=Init(data); cerr << "data = NULL ? " << (data==NULL) << endl;Ausgabe innerhalb der Funktion: 1 0 0 0
Ausgabe Hauptrogramm 1 1Wies ist der void-Zeiger nach dem Aufruf immer noch NULL?
Grüße
btm
-
btm schrieb:
Wies ist der void-Zeiger nach dem Aufruf immer noch NULL?
Weil nur sein Wert an die Funktion übergeben wurde, so ist das eben in C++. Du kannst aber statt dessen eine Referenz übergeben:
void funktion(void*& pointer) ...
-
Hi Bashar,
Yip, so geht es. Kannst du einem dummy nochmal ein paar Worte zum unterschied zwischen void* und void*& erklären? Und ist das bei allen Zeigertypen so?
Grüße btm
-
btm schrieb:
Yip, so geht es. Kannst du einem dummy nochmal ein paar Worte zum unterschied zwischen void* und void*& erklären?
void* ist ein Zeiger auf einen beliebigen Datenbereich - der wird per Wert übergeben (d.h. deine Funktion arbeitet mit einer eigenen Variable, die zu Beginn den Wert deines realen Parameters erhält).
void*& ist eine Referenz auf einen void*-Zeiger, also quasi ein Alias des übergebenen Parameters (d.h. deine Funktion arbeitet direkt mit der Variable, die du übergeben hast).Und ist das bei allen Zeigertypen so?
Nicht nur bei Zeigertypen
Das funktioniert bei JEDEM Variablentyp auf diese Art.