Zeiger auf Funktionen in C ++

Wenn eine Anwendung ausgeführt wird, existieren die Funktionen in der Anwendung in der Gedächtnis- so genau wie alles andere in Erinnerung, sie eine Adresse haben. Und eine Adresse ist gut, weil auf diese Weise, Menschen, die Sie finden können.

Sie können die Adresse einer Funktion übernehmen, indem Sie den Namen des Restaurants zu nehmen und setzen die Adress-of Operator () Vor dem Funktionsnamen, wie folgt aus:

Adresse = MyFunction-

Aber um diese Arbeit zu machen, müssen Sie wissen, welche Art zu erklären, Adresse. Das Adresse Variable ist ein Zeiger auf eine Funktion, und der sauberste Weg, um einen Typ zuzuordnen ist ein zu verwenden, typedef. (Glücklicherweise ist dies eine Zeit, als die meisten Menschen bereit sind, zu verwenden, typedef.)

Hier ist die typedef, Glaub es oder nicht:

typedef int (* FunctionPtr) (int) -

Es ist schwer zu folgen, aber der Name des neuen Typs ist FunctionPtr. Dies definiert einen Typ namens FunctionPtr dass gibt eine ganze Zahl (ganz links int) Und nimmt eine ganze Zahl als Parameter (der am weitesten rechts int, die in Klammern sein muss).

Der mittlere Teil dieser Aussage ist der Name des neuen Typs, und Sie müssen es mit einem Stern vorangestellt, was bedeutet, dass es ein Zeiger auf den ganzen Rest des Ausdrucks ist. Außerdem müssen Sie den Typnamen und seine vorhergehenden Sternchen in Klammern setzen.

Und dann sind Sie bereit, einige Variablen zu erklären! Hier geht:

FunctionPtr Adresse = MyFunction-

Diese Zeile deklariert Adresse als Zeiger auf eine Funktion, und initialisiert es MyFunction (). Nun, für diese zu arbeiten, um den Code für MyFunction () müssen den gleichen Prototyp in der erklärt haben typedefIn diesem Fall muss eine ganze Zahl als Parameter und eine Ganzzahl zurück.

So zum Beispiel können Sie eine Funktion wie dieses:

int TheSecretNumber (int x) {return x + 1-}

Dann könnten Sie haben eine Main() daß speichert die Adresse dieser Funktion in einer Variablen - und ruft dann die Funktion, die durch die Variable:

int main (int argc, char * argv []) {typedef int (* FunctionPtr) (int) -int MyPasscode = 20-FunctionPtr Adresse = TheSecretNumber-cout lt; lt; Adresse (MyPasscode) lt; lt; endl-}

Nun, nur so können Sie sagen, dass Sie es gesehen haben, hier ist es, was die Adresse Erklärung würde so aussehen ohne Verwendung einer typedef:

int (* Adresse) (int) = TheSecretNumber-

Das Werbegeschenk sollte sein, dass Sie zwei Dinge in Klammern nebeneinander haben, und der Satz auf der rechten Seite hat nur Typen in seinem Inneren. Die auf der linken Seite hat einen Variablennamen. Also diese Linie zu erklären ist nicht eine Typ- vielmehr eine Variable zu deklarieren.

Menü