Zeiger auf Funktionen (1/2)

Sehr praktisch sind Pointer auf Funktionen. Man nehme z.B. an, man habe im Programmtext verschiedene mathematische Funktionen vordefiniert, sowie eine Plotfunktion. Nun möchte man der Plotfunktion die entsprechende Funktion übergeben. Dies geht recht einfach:
  double f(double x, double y, int i, char* title) { ... }
  double g(double x, double y, int i, char* title) { ... }
  double h(double x, double y, int i, char* title) { ... }


  double (*F) (double, double, int, char*) // Typ einer entspr. Funktion
    = f;
  void plot(int min, int max, double (*funk) (double, double, int, char*)) {
    // ....
    funk(x, y, i, "Titel");  // kanonischer Aufruf der uebergebenen Funktion
    (*funk) (x, y, i, "Titel"); // aequivalente Schreibweise

  plot(F);  // zeichnet f;
  plot(f);  // zeichnet auch f;
  plot(g);  // zeichnet g;
Dabei muß sowohl die Parameterliste als auch der Rückgabewert der entpsrechenden Funktionen exakt übereinstimmen.