Array mit Funktionspointern

Gast #1590197
Lesenswert?

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.
#1590226
Lesenswert?

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.
Gast #2898282
Lesenswert?

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
Gast #2898410
Lesenswert?

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();
Gast #2979780
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren