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 1

    Wies 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.


Anmelden zum Antworten