2016-04-16 16 views
1

Ich sah this, aber es hat nie spezifiziert, wie man einen Funktionszeiger erklärt, der einen Zeiger zu einer Funktion zurückgibt (er definierte einfach, wie man eine Funktion verursacht, die einen Funktionszeiger zurückbringt).Wie schreiben Sie einen Funktionszeiger, der einen Funktionszeiger ohne typedefs zurückgibt?

Während es wahrscheinlich klüger wäre, typedefs zu verwenden, interessiert mich die Syntax, um dies ohne typedefs zu erreichen.

Dies ist der nächstgelegene ich bekam:

struct function_hash_table { 
    unsigned int(*(*getFunction)(Type, Type, Type))(char *name); 
} 

(Welche ist eigentlich eher auf diese Frage irrelevant).

Aber, wenn ich versuche, es so zu nennen:

hash_table.getFunction("Test"); 

ich Fehler für zu wenige Parameter und falsche Parametertypen. Clarify

An:

unsigned int(*hash_get_function(Type, Type, Type))(char *name) 

für aktuelle Funktionen gut funktioniert und in dem Link erklärt. Wie soll ich jedoch einen Funktionszeiger deklarieren, der auf eine solche Definition verweist?

+0

„es nie festgelegt, wie ein Funktionszeiger zu deklarieren, die eine Funktion gibt (es einfach definiert, wie eine Funktion zu erstellen, einen Funktionszeiger zurückkehrt)“ - in C, Funktionsbezeichner sind nicht erstklassig. Sie können keine Funktion zurückgeben. Sie können nur einen Funktionszeiger zurückgeben. –

+0

Mein Wortlaut ist offensichtlich irreführend. Ich verstehe, was du gerade gesagt hast, aber darum habe ich nicht gefragt. Wenn ich getFunction nicht in eine Struktur schreiben müsste, wäre ich in der Lage, sie richtig zu schreiben. Die Frage ist, wie man einen Funktionszeiger definiert, der einer Funktion entspricht, die nicht innerhalb der Struktur liegt. – Isaiah

+0

ist es egal, ob Ihr Zeiger ein Mitglied einer Struktur oder eine "Stand-alone" -Variable ist. Die Erklärung ist dieselbe. –

Antwort

2

wie einen Funktionszeiger erklären, dass ein Zeiger-to-a-Funktion können Sie erklären, wie

Type (* (*funcPtr)(Type, Type)) (Type); 

Erklärung lesen als

Ohne typedef mit zurückgibt: funcPtr a Zeiger auf eine Funktion, die zwei Argumente vom Typ Type erwartet und einen Zeiger auf eine Funktion zurückgibt, die ein Argument vom Typ Type erwartet undzurückgibt.

Wenn Sie wan eine Funktion zu deklarieren, die einen Zeiger dann wieder

Type (* func(Type, Type)) (Type); 

Erklärung lesen als: func eine Funktion, die zwei Parameter vom Typ akzeptiert Type und gibt einen Zeiger auf Funktion, die ein Argument akzeptiert Geben Sie Type ein und geben Sie Type zurück.

Jetzt können Sie zuweisen func zu funcPtr

functPtr = func; 
+0

Ich denke, ich sehe jetzt. Ich muss die oparameter Standorte umkehren. – Isaiah

Verwandte Themen