HyperMario schrieb:
> Sven B. schrieb:
>> Das sind zwei Function Pointer, die in einem struct gruppiert sind.
>
> Danke, das bedeutet wohl das damit 2 Funktionen aufgerufen werden.
Nein, das bedeutet es so nicht.
Aber siehe zunächst meine Antwort auf Deine zweite Frage.
> Warum ist das in einer struct und nicht einzeln?
Strukturen sind, mal ganz grob gesprochen, genau was das Wort sagt:
Dinge, die sich aus mehreren anderen Dingen zusammensetzen.
Ein Auto ist ein Beispiel für eine Struktur aus Sitzen,
Zigarettenanzünder, etcpp. und nicht zu vergessen, dem Motor.
Ein Buch ist ein Beispiel für eine Struktur aus Kapiteln, Absätzen,
Sätzen, Haupt- und Nebensätzen etcpp.
(Beachte, dass ich die Beispiele auf zwei unterschiedliche Arten
beschrieben habe. Vielleicht denkst Du darüber mal nach, was der
Unterschied ist).
Wenn also Strukturen vorliegen, dann weil sie unterscheidbare
Einzelteile habe.
In der Umkehrung verwendet man Strukturen, wenn man Einzelteile
zusammenfügen will. Natürlich. :-)
Bei der Programmierung gibt es nun häufig Fälle in denen mehrere
Variablen beteiligt sind, wenn es gilt einen Vorgang durchzuführen.
Man nehme etwa einen Ringpuffer.
Da gibt es einen Lesezeiger, einen Schreibzeiger und den Puffer selbst.
Es bietet sich nun an, diese drei Variablen in einer Struktur
organisatorisch zusammenzufassen.
Das hat drei Vorteile:
1. Wenn man einen Puffer anlegt so sind alle notwendigen
Teilelemente damit erzeugt. Die Variablen für den Lese- und den
Schreibzeiger und der Puffer selbst. (Das gibt noch ein besonderes
Problem, aber das lasse ich hier mal weg).
2. In dem besonderen Fall, dass man mehrere Puffer anlegt, sind durch
die Zusammenfassung aller Teilelemente, die Puffer insgesamt klar
unterscheidbar, d.h. man sieht beim lesen, was sich worauf bezieht.
3. Textuell, also in der Organisation des Quellcodes sind immer alle
notwendigen Elemente beisammen . Man muss also nicht erst immer gucken
wo man diese oder jene Variable deklariert bzw. definiert hat (und wie
sie heissen).
So. Ich komme nun auf die erste Frage zurück.
Dein Beispiel legt eine Struktur von Zeigern auf Funktionen an. Mit so
einem Zeiger kann man zwei Dinge tun.
1. Man kann den Zeiger ändern, d.h die Funktion ändern und damit das
beeinflussen was geschieht.
2. Man kann diese Funktion(en) aufrufen, damit sie tut, was sie eben tun
soll.
Aber: In C geht es nicht, wenn man zwei (oder mehr) Funktionszeiger in
der Struktur hat, dass alle Funktionen auf einen Schlag aufgerufen
werden - und damit gleichzeitig oder nacheinander ausgeführt werden.
Die Antwort auf die erste Frage ist also: Nein. Das geht nicht.
Was mittlerweile in C wohl geht, ist, die Werte mehrerer
Mitgliedervariablen der Struktur in einer Anweisung zu setzen.
Man kann auch schon immer, eine Struktur komplett kopieren oder
initialisieren.
Aber aufrufen bzw. ausführen kann man die Funktionen, auf welche die
Zeiger zeigen nicht auf einen Schlag - d.h. nicht mit einer
einzelnen Anweisung. Dazu sind so viele Anweisungen nötig, wie es Zeiger
auf Funktionen in der Struktur gibt.