c typedef void pointer problem

#2397088
Lesenswert?
• ▲
▼
zeus schrieb:
> Hallo !
>
> kann mir bitte jemand diese C code zeile erklären ?
>
> typedef void (*timer_expiry_cb_t)(void *);
>
> danke voraus!

Das beschreibt den Typ einer Funktion, welche einen void-Pointer als 
Argument entgegennimmt und keine Rückgabe liefert. Dieser Typ kann im 
Folgenden als "timer_expiry_cb_t" benannt werden.

Viele Grüße,
        Simon
Gast #2397113
Lesenswert?
• ▲
▼
Danke erstmal für die schnelle antworten.

soweit ich verstanden hab da es ein typedef ist kann ich es wie folg 
verwenden:
1
typedef void (*timer_expiry_cb_t)(void *);
2

3
timer_expiry_cb_t callback; // --> d.h. void (*callback) (void *);
4
callback = funktion1; 
5
(*callback)(&var1); // die funktion1 wird mit der adresse von var1 aufgerufen.

stimmt das?
#2397118
Lesenswert?
• ▲
▼
(unknown) schrieb:

> soweit ich verstanden hab da es ein typedef ist kann ich es wie folg
> verwenden:

Ja. Aber
  callback = function;
  callback(&var1);
tut es auch und entspricht dem Ursprung der Sprache, während
  callback = &function;
  (*callback)(&var1)
als Konzession an Nutzer hinzu kam, die von einem Funktionsnamen als 
implizitem Pointer und dem () Operator als Aufruf über einen Pointer 
irritiert waren. Daher ist
  callback = function;
  (*callback)(&var1)
ein inkonsistenter Hybrid aus beiden Varianten.
Gast #2397426
Lesenswert?
• ▲
▼
Man kann sogar schreiben
1
callback = *********function;
2
(**********callback)(&var1);

Bei Funktionen und deren Aufruf sind Dereferenzierungen beliebig oft 
machbar, und es kommt immer das gleiche raus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren