Forum: Compiler & IDEs Array mit Funktionspointern


von Student 08 (Gast)


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.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

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.

von Hc Z. (mizch)


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.

von paco89 (Gast)


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

von Klaus W. (mfgkw)


Lesenswert?

ja

von xfr (Gast)


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();

von zander (Gast)


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

von DirkB (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.