Hallo,
ein void Pointer ist auch 'nur' ein Zeiger auf eine Adresse. Es ist zur compiler Zeit noch nicht festgelegt, welcher Type sich an der Adresse befindet. Wenn du einen Zeiger mit dem Wert 54 hast, sagt das nur aus, dass sich an Speicheradresse 54 das gesuchte befindet. Das kann dann ein 8 Bit oder auch ein 16 Bit-Wert sein genauso wie eine Funktion.
Zur Verwirrung, void* ist kein Zeiger auf void, es ist ein Zeiger auf einen zur Zeit unbekannten Type.
Ich kann es nicht besser erkären.
HTH
Jens
Address wird auf einen passenden Typ gecastet und aufgerufen:
Falls es über eine eigene Variable gehen soll:Code:((void(*)(void)) address) ();
oder etwas besser lesbarCode:void (*func)(void) = (void(*)()) address; func();
Code:void (*func)(void) = (typeof(func)) address;
oder
Code:typedef void (*func_t)(void); ... func_t func = (func_t) address; func(); // oder direkt // ((func_t) address)();
Disclaimer: none. Sue me.
Lesezeichen