Hallo ich arbeite gerade an meiner Studien Arbeit.Zu besseren ausführung meines Messprogrammes soll ich, von meinem Chef aus, ein Array auf eine Struktur mit Funktionspointer erstellen.Kann mir irgend jemand sagen wie dies aussieht?Habe sowas noch nie gemacht. Betsen Dank schon mal.
1 | int (*func[])(int arg) = |
2 | {
|
3 | func1, |
4 | func2, |
5 | 0
|
6 | }
|
7 | |
8 | int func1(int arg); |
9 | int func2(int arg); |
10 | |
11 | int (*pFunc)(int arg) = 0; |
12 | int ret = 0; |
13 | |
14 | pFunc = func[i]; |
15 | ret = pFunc(arg); |
Strip down aus nem Programm von mir. Hoffentlich hab ich mich nicht vertan :-) VG, /th.
Was ist ein Array auf eine Struktur? Ich kann mir höchstens ein Array von structs vorstellen, wobei aber unklar ist, was die struct enthalten soll. Also mal ohne die "Struktur", da dafür die nötigen Informationen fehlen. Ein Array von structs ist auch nichts wirklich Unangenehmes oder Schwieriges. Zum Array von Funktionspointern. Nehmen wir an, die Funktionen haben folgenden Prototyp:
1 | char func1(void); |
2 | char func2(void); |
So definierst Du Dir dann ein initialisiertes Array von Funktionspointern:
1 | char (*f_array[])(void) = { func1, func2 }; |
Und so rufst Du eine Funktion aus dem Array auf:
1 | f_array[1](); //ruft func2 auf |
Ich hoffe, das genügt zum Einstieg.
hallo, ich habe dazu noch eine frage: was passiert z.B. wenn die funktion func1 keinen rückgabetyp hat. so z.B. void func1(void) muss ich dann mein array mit funktionspointern, dann so deklarieren: void (*f_array[]) (void) = {func1}; edit: das mit func2 habe ich jez mal rausgelassen
Man kann es auch mit einem typedef leserlicher machen:
1 | typedef char (*meinefunktion_t)(void); |
"meinefunktion_t" ist jetzt der Typ "Zeiger auf eine Funktion, die void als Parameter nimmt und char zurück gibt". Das Array sieht dann ganz normal aus:
1 | char funktion1(void) { |
2 | // mach was
|
3 | }
|
4 | |
5 | char funktion2(void) { |
6 | // mach was anderes
|
7 | }
|
8 | |
9 | meinefunktion_t meinarray[2] = {funktion1, funktion2}; |
Und aufrufen einer Funktion aus dem Array sieht so aus wie in den anderen Beispielen:
1 | meinarray[0](); |
Oder wenn man möchte:
1 | meinefunktion_t zeiger; |
2 | zeiger = meinarray[1]; |
3 | zeiger(); |
Hallo, hätte da noch eine ergänzende Frage zum Thema. Kann ich so auch ein dreidimensionales Array erzeuegen? sprich: void (*hallo_array[][][])() = {{{x_1, x_2}, {x_3, x_4}}, {{x_5, x_6}, {x_7, x_8}}, {{x_9, x_10}, {x_11, x_12}}}; Bekomme hier immer den Fehler: error: array type has incomplete element type Bin für jede Rückmeldung dankbar! zander
Bei Arrays kann nur der höchste Index (der linke) automatisch ermittelt werden. Die anderen Größen musst du angeben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.