Die Aufrufe der Funktionspointer sind gar nicht das Problem, wie Du auch
erkennst, wenn Du Dir die Fehlermeldungen mal genauer ansiehst:
1 | void menu(unsigned char index, p_of_funk vek[])
|
2 | }
|
3 |
|
4 | vek[menu_nr - '0' - 1](); //Hier wird die Funktion gestartet
|
5 |
|
6 | }
|
Offensichtlich hast Du Dir das aus dem Gedächtnis so zurechtgetippelt.
Kopiere Sourcecode, tippe nichts aus dem Gedächtnis ab, denn hier sind
mindestens zwei schwere Fehler enthalten.
1 | void menu(unsigned char index, p_of_funk vek[])
|
2 | {
|
3 | vek[index - '0' - 1](); //Hier wird die Funktion gestartet
|
4 | }
|
> Die Warnmeldung:
> warning: passing argument 2 of 'menu' from incompatible pointer type
menu erwartet also ein Array, Du aber rufst es mit einem Pointer
auf:
1 | void Regler(void)
|
2 | {
|
3 | menu(Regler_M, &V_Arr_Re);
|
4 | return;
|
5 | }
|
Woraus das Array besteht und worauf der Pointer zeigt, ist hier
unabhängig vom Funktionspointer.
Du kannst menu auch so schreiben:
1 | void menu(unsigned char index, p_of_funk *vek)
|
2 | {
|
3 | vek[index - '0' - 1](); //Hier wird die Funktion gestartet
|
4 | }
|
und Dich hier des Array/Pointer-Dualismus bedienen.
Du solltest allerdings noch unbedingt eine Bereichsüberprüfung
durchführen, denn was geschieht, wenn die Funktion mit nicht
vorgesehenen Werten für "index" aufgerufen wird?