Funktionszeiger deklarieren
Zeiger auf Funktionen
Funktionszeiger deklarieren ist eine kostenlose C Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.
Funktionen haben Adressen
Wie Daten befindet sich jede Funktion an einer Adresse im Speicher. Ein Funktionszeiger speichert diese Adresse, sodass Sie die Funktion indirekt aufrufen können.
#include <stdio.h>
void greet(void) { printf("hello\n"); }
int main(void) {
void (*fp)(void) = greet;
fp();
return 0;
}Die Deklaration lesen
Die Deklaration int (*fp)(int) bedeutet: fp ist ein Zeiger auf eine Funktion, die ein int entgegennimmt und ein int zurückgibt.
Die Klammern um *fp sind erforderlich.
#include <stdio.h>
int square(int x) { return x * x; }
int main(void) {
int (*fp)(int) = square;
printf("%d\n", fp(5));
return 0;
}Eine Funktion zuweisen
Ein Funktionsname wird automatisch in seine Adresse umgewandelt. Daher sind fp = square und fp = &square gleichwertig.
#include <stdio.h>
int dbl(int x) { return x * 2; }
int main(void) {
int (*fp)(int);
fp = &dbl;
printf("%d\n", fp(7));
return 0;
}Aufruf über den Zeiger
Sie können einen Funktionszeiger mit fp(args) oder explizit mit (*fp)(args) aufrufen. Beide Varianten bewirken dasselbe.
#include <stdio.h>
int add1(int x) { return x + 1; }
int main(void) {
int (*fp)(int) = add1;
printf("%d\n", fp(10));
printf("%d\n", (*fp)(10));
return 0;
}Die Signatur muss übereinstimmen
Der Typ eines Funktionszeigers umfasst den Rückgabetyp und die Parametertypen. Sie können ihm nur eine Funktion zuweisen, deren Signatur exakt übereinstimmt.
#include <stdio.h>
double half(double x) { return x / 2.0; }
int main(void) {
double (*fp)(double) = half;
printf("%f\n", fp(9.0));
return 0;
}Zur Laufzeit neu zuweisen
Ein Funktionszeiger ist eine Variable. Daher können Sie ihn während der Programmausführung auf verschiedene Funktionen zeigen lassen.
#include <stdio.h>
int inc(int x) { return x + 1; }
int dec(int x) { return x - 1; }
int main(void) {
int (*op)(int) = inc;
printf("%d\n", op(5));
op = dec;
printf("%d\n", op(5));
return 0;
}Auswahl anhand einer Bedingung
Wählen Sie anhand eines Werts zur Laufzeit die aufzurufende Funktion aus und rufen Sie sie anschließend über einen einzigen Zeiger auf.
#include <stdio.h>
int plus(int a) { return a + 10; }
int minus(int a) { return a - 10; }
int main(void) {
int up = 1;
int (*op)(int) = up ? plus : minus;
printf("%d\n", op(100));
return 0;
}typedef für bessere Lesbarkeit
Die Syntax für Funktionszeiger ist ausführlich. Mit einem typedef geben Sie dem Typ einen Namen und machen Deklarationen übersichtlicher.
#include <stdio.h>
typedef int (*IntOp)(int);
int triple(int x) { return x * 3; }
int main(void) {
IntOp op = triple;
printf("%d\n", op(4));
return 0;
}Funktionen mit zwei Argumenten
Funktionszeiger können jede Signatur beschreiben. Hier ist ein Beispiel für eine binäre Ganzzahloperation.
#include <stdio.h>
int sum(int a, int b) { return a + b; }
int main(void) {
int (*op)(int, int) = sum;
printf("%d\n", op(3, 4));
return 0;
}Ein NULL-Funktionszeiger
Wie Datenzeiger kann auch ein Funktionszeiger NULL sein. Prüfen Sie immer, ob ein möglicherweise nicht gesetzter Zeiger gültig ist, bevor Sie ihn aufrufen.
#include <stdio.h>
int twice(int x) { return x * 2; }
int main(void) {
int (*op)(int) = NULL;
if (op == NULL) op = twice;
if (op) printf("%d\n", op(8));
return 0;
}Die Adresse ausgeben
Sie können die gespeicherte Adresse untersuchen. Verschiedene Funktionen haben unterschiedliche Adressen.
#include <stdio.h>
int f(int x) { return x; }
int main(void) {
int (*fp)(int) = f;
printf("function pointer is %s\n", fp ? "set" : "null");
return 0;
}Kurzer Test
Testen Sie Ihr Verständnis von Deklarationen für Funktionszeiger.
Zusammenfassung
Sie haben gelernt, Funktionszeiger zu deklarieren und zu verwenden:
- Syntax:
ret (*name)(params)mit erforderlichen Klammern. - Weisen Sie den Zeiger über den Funktionsnamen zu, der automatisch in eine Adresse umgewandelt wird.
- Rufen Sie ihn mit
fp(args)oder(*fp)(args)auf. - Die Signatur muss übereinstimmen;
typedefverbessert die Lesbarkeit.
Häufig gestellte Fragen
Ist die Lektion „Funktionszeiger deklarieren“ kostenlos?
Ja — der vollständige Text von „Funktionszeiger deklarieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Funktionszeiger deklarieren“?
Zeiger auf Funktionen Du übst C Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C Academy zu starten?
Keine Vorkenntnisse erforderlich. C Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Funktionszeiger deklarieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C Academy-Lektion Code schreiben und ausführen?
Ja. Jede C Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Funktionszeiger deklarieren
- Funktionen übergeben
- qsort mit Vergleichsfunktionen
- Tabellen mit Funktionszeigern