Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

C

Home Funktionen Rekursionen Cookie Jar

10.8 Funktionspointer

Auch für Funktionen können Zeiger auf Funktionen definiert werden. Und über diese Zeiger können die Funktionen auch wieder aufgerufen werden. Da hier genau auf die Auswertungsreihenfolge der Operatoren geachtet werden muß, ist den Funktionspointern ein eigenes kleines Kapitel gewidmet. Wir erinnern uns an die Zeiger:

int *a;

a ist ein Zeiger auf ein int.

int * d(void);

Da die Klammern eine höhere Priorität haben, ist dies eine Funktion d mit dem Returnwert int *. Damit wir einen Funktionspointer haben, muß also der * an den Namen der Funktion "gebunden" werden. Also müssen wir klammern.

int (*d)(void);

Dies ist jetzt ein Zeiger d vom Typ Funktion ohne Parameter mit einem Returnwert int. Wenn wir den Zeiger verwenden wollen, muß er wieder dereferenziert werden. Da auch hier der * eine geringere Priorität als die Klammern für den Parameter haben, muß die Dereferenzierung geklammert werden.

Die Adresse einer Funktion bekommt man analog der Adresse von Feldern einfach durch den Namen ohne Klammern.

#include <stdio.h>

int a(int x,int y)
{
   return x+y;
}

int main(void)
{  int (*p)(int,int);

   p = a;
   printf("Summe = %d\n",(*p)(3,4));
   return 0;
}

Funktionspointer lassen sich immer dann verwenden, wenn ein Algorithmus unabhängig von einem konkreten Datentyp formuliert werden soll. Z.B. muß ein Sortieralgorithmus die Daten vergleichen, er benötigt also eine Vergleichsfunktion. Ein Beispiel gehört zur ANSI Lib. Wer einmal in die Datei stdlib.h nachschaut, findet dort:

void    qsort( void *base, size_t nmemb, size_t size,
          int (*compar)() );

Oder ein Zeichenprogramm verwaltet grafische Objekte und zu jedem Objekt gehört eine passende Zeichenfunktion, die das Objekt malen kann. Wenn als Zeiger auf die eigentlichen Objektdaten ein typloser Zeiger benutzt wird, muß die Verwaltung keine Kenntnisse der Objekte haben. Wir nähern uns damit schon den Möglichkeiten der objektorientierten Programmierung, wenn wir unterschiedliche Daten mit der gleichen Schnittstelle behandeln können.


Home Funktionen Rekursionen Cookie Jar


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum