void*



  • Ansi C soll ja void* unterstützen. Wozu braucht man void* und was bezweckt void*. Kann mir vieleicht jemand mal ein kleines, sinnvolles Bsp. zeigen?
    mfg



  • memcpy oder ncih?



  • häääääääääääääää?



  • Hoffe ich lieg da net falsch.
    void* ist ein Zeiger auf void. er kann auf alle datentypen gesetzt werden:

    void*pointer;
    int Zahl=5;
    char Zeichen='A';
    pointer=&Zahl;
    cout<<*pointer;//5
    pointer=&Zeichen;
    cout<<*pointer;//A
    


  • cout << *pointer;
    

    bekomme ich einen Fehler.

    'error C2100: Ungültige Dereferenzierung.'
    


  • es muss ja auch "cout << *(int *)pointer" heissen.



  • und man kann auch funktionspointer benutzen, also bei bestimmten bedingungen dem pointer eine andere funktion aufrufen.

    sowas hab ich grad bei einer api gehabt, in der man eine intervalfunktion, die man selber schreiben muss, mit der anwendung synchronisiert ausführen lassen kann.

    praktisch 👍



  • DrOetker schrieb:

    und man kann auch funktionspointer benutzen, also bei bestimmten bedingungen dem pointer eine andere funktion aufrufen.

    Ich weiß nicht ob du das gemeint hast, aber weder in C noch in C++ darf ein void*-Pointer eine Funktion referenzieren. Ein void*-Pointer ist darf auf jede Art von Objekt zeigen, nicht aber auf Funktionen (Funktionszeiger != Objektzeiger). Es gibt Standards (z.B. Posix) und Compiler die etwas anderes definieren, aber das ist dann außerhalb von Standard-C++.



  • nagut, dann sind funktionspointer was anderes? sind trotzdem praktisch...

    ich hatte da sowas: define int(tIntFunc*)(void); ...



  • DrOetker schrieb:

    nagut, dann sind funktionspointer was anderes?

    Jup.
    In C++ ist es folgendes nicht legal:

    // Eine Funktion f
    void f();
    
    // Ein Funktionszeiger der auf eine Funktion vom Typ void() verweisen kann - zeigt
    // auf f.
    void (*func)() = f;
    
    // Error! Ein void-Zeiger ist ein Objektzeiger. Er kann nicht auf eine Funktion
    // verweisen!
    void* p = func;
    
    // Error! Sie oben:
    void* p = reinterpret_cast<void*>(func);
    
    // Error! Siehe oben: 
    void* p = (void*)func;
    

    sind trotzdem praktisch...

    Natürlich. Und wie gesagt, einige Compiler erlauben die Zuweisung eines Funktionszeigers an einen void-Zeiger. Zumindest unter Verwwendung eines C-Casts. Das ist dann zwar kein Standard-C++, aber ein Verhalten, dass z.B. von Posix gefordert wird.


Log in to reply