Funktionstyp zum bearbeiten von Elementen in Liste
-
Hallo Leute!
Ich habe eine Frage zu einer Aufgabe die uns unser Professor gestellt hat. Ich konnte sie mir leider durch lesen und google nicht wirklich selber beantworten.Es geht um einen Funktionstyp den ich mit typedef herstellen soll.
Laut Musterlösung sieht das Ding so austypedef int (*ItemFunction) (struct tElement*);
die dazugehörenden Strukturen sind:
struct tElement{ char datum[11]; unsigned tagesproduktion; struct tElement* next; }; struct List{ struct tElement* first; struct tElement* last; };
Es gibt noch funktionen wie zb. print die dann durch diesen Funktionstyp aufgerufen werden können. Etwa so:
int forall(struct List *list, ItemFunction exec){ if (!list->first) return 0; struct tElement* work; int count=0; for (work=list->first;work->next != NULL;work=work->next){ count += exec(work); } return count; }
Ich habe nur keine Ahnung warum das funktioniert. Speziell das mit dem ItemFunction exec.
Ist typedef nicht nur ein Ding um lange typenamen zu vereinfachen?
Laut Handbuch typedef <definition> <identifier>; oder ist es das auch in meinem Beispiel und ich merks nicht?*kopf kratz*
ich hoffe es kommt rüber was ich fragen will bei meinem Geschreibsel ...Vielen Dank schon mal
-
typedef int (*ItemFunction) (struct tElement*);
Damit definierst du dir einen Funktionszeiger der "ItemFunction" heißt, den Rückgabetyp int hat und als Parameter ein Zeiger auf "tElement" verlangt, "mehr" ist das nicht.
Da Funtionen einen Rückgabetyp haben steht halt vor dem Namen nochmal ein Typ.MfG Pellaeon