2017-05-20 3 views
1

(int (*) (void *, void *)) (numerisch? Numcmp: strcmp));Referenzieren von Funktionen mit Zeigern

numcmp und strcmp sind Funktionen mit zwei Argumenten.

Ich verstehe, was der bedingte Operator tut. Das ist einfach.

Ich kann meinen, dass dies zu nancmp (void *, void *) oder strcmp (void *, void *), aber ich verstehe nicht warum? Vor allem die: int (*), verwirrt mich.

+0

Mögliches Duplikat von [Wie funktionieren Funktionszeiger in C?] (Http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work) – Siguza

+0

Fragen Sie, warum die Syntax ist es so (so komisch)? –

+0

Randnotiz: Aufruf des resultierenden Zeigers ist UB. 'strcmp's Parameter sind nicht' void * ', noch sind' numcmp's (andernfalls würde die Bedingung nicht kompiliert werden). Natürlich ist das genau der Compiler-Fehler, den Sie bekommen, wenn Sie nicht mit dieser Besetzung den Mund halten. – Quentin

Antwort

3

Der Ausdruck (int (*) (void*, void*)) ist nur eine Umwandlung in einen Funktionszeiger mit zwei void* Argumente, die int zurückgeben. Wie bei anderen Umwandlungen ähnelt die Syntax einer Variablendeklaration ohne Variablennamen. Dann wird abhängig vom booleschen Schalter entschieden, welche der Funktionen zu werfen ist.