Typedef für Funktionszeiger in C++
Dieser Artikel erklärt den Zweck von typedef
in C/C++. Wir werden weiter besprechen, wie wir typedef
mit einem Funktionszeiger verwenden können und welche Vorteile es hat.
Lassen Sie uns zuerst typedef
und seine übliche Verwendung diskutieren.
das Schlüsselwort typedef
typedef
steht für Typdefinition. Wie der Name schon sagt, ist typedef
eine Möglichkeit, einem bestehenden Datentyp, dem Typ einer Variablen, einen neuen Namen zuzuweisen.
Wenn Sie beispielsweise eine Integer-Variable speichern möchten, ist der Datentyp int. In ähnlicher Weise wird der Datentyp char oder string für ein Wort oder einen Satz verwendet.
#include <iostream>
#include <string>
using namespace std;
int main() {
int a = 10;
string greeting = "Hello!";
return 0;
}
Mit Hilfe von typedef
können Sie sich von den tatsächlich verwendeten Typen lösen und sich mehr auf die Idee konzentrieren, was eine Variable bedeuten soll. Das macht das Schreiben von sauberem Code einfacher, aber es macht auch das Bearbeiten Ihres Codes viel einfacher.
Wenn Sie beispielsweise nach einem Cricket-Match die Aussagen von drei verschiedenen Spielern aufzeichnen, kann typedef
verwendet werden.
#include <iostream>
using namespace std;
int main() {
typedef char* statement;
statement PlayerA = "I played bad";
statement PlayerB = "I played very well";
statement PlayerC = " I could not get the chance to Bat";
cout << "Player A said:" << PlayerA;
return 0;
}
Im obigen Code ist char*
ein Zeichenzeiger, auf den wir das Schlüsselwort typedef
angewendet haben, um diesen Datentyp mit dem neuen Namen statement
zu ändern. Dieser neue Alias ist in diesem Fall aussagekräftiger, da wir die Aussagen der Spieler aufzeichnen.
Daher verbessert die typedef
die Lesbarkeit des Codes.
Der typedef
kann auch mit Funktionszeigern verwendet werden. Bevor wir darauf eingehen, lassen Sie uns kurz Funktionszeiger vorstellen.
Funktionszeiger
In C++ sind Zeiger Variablen, die die Speicheradresse einer Variablen enthalten. Ähnlich ist ein Funktionszeiger ein Zeiger, der die Adresse einer Funktion enthält.
Ein Funktionszeiger kann mit folgendem Code deklariert werden:
int (*point_func)(int, int);
Im obigen Code ist point_func
ein Zeiger, der auf eine Funktion zeigt, die zwei Integer-Variablen als Argumente und int als Rückgabetyp hat.
typedef
mit Funktionszeiger
Die Syntax sieht für typedef
mit einem Funktionszeiger etwas seltsam aus. Sie müssen nur das Schlüsselwort typedef
an den Anfang der Deklaration des Funktionszeigers setzen.
typedef int (*point_func)(int, int);
Der obige Befehl bedeutet, dass Sie einen neuen Typ mit dem Namen point_func
definiert haben (ein Funktionszeiger, der zwei int-Argumente akzeptiert und eine ganze Zahl zurückgibt, d. h. int (*) (int, int)
). Jetzt können Sie diesen neuen Namen für die Deklaration von Zeigern verwenden.
Schauen wir uns folgendes Programmierbeispiel an:
#include <iostream>
using namespace std;
int abc(int x1, int x2) { return (x1 * x2); }
int main() {
typedef int (*pair_func)(int, int);
pair_func PairProduct; // PairProduct is pointer of type pair_func
PairProduct = &abc; // PairProduct pointer holds the address of function abc
int product = (*PairProduct)(20, 5);
cout << "The product of the pair is: " << product;
return 0;
}
Ausgang:
The product of the pair is: 100
Bis hierher ist klar, was typedef
macht, wenn es vor dem Funktionszeiger verwendet wird. Die Funktion abc
nimmt zwei Argumente und gibt ihr Produkt im obigen Code zurück.
In der Funktion main
haben wir typedef
verwendet, um einen neuen Namen für den Funktionszeiger zu definieren (d. h. pair_func
). Dann haben wir das PairProduct
vom Typ pair_func
definiert und der Funktion abc
die Adresse zugewiesen.
Danach haben wir die Funktion abc
aufgerufen, indem wir den Zeiger PairProduct
(einfachere Syntax) dereferenziert und zwei Argumente übergeben haben.