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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.