PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : funktionszeiger im array



Jaipur
21-01-2003, 18:09
hi,

ist es möglich einen array von anzulegen?
und wie rufe ich die funktionen dann auf?

void fkt[10]]; ... das wären dann meine funktionszeiger

void kommen()
{
... printf("kommen\n");
}
void gehen()
{
... printf("gehen\n");
}

int main()
{
... fkt[0] = kommen;
... fkt[1] = gehen

... for( i=0; i<2; i++)
... /* hier nun machen und gehen aufrufen */

... return 0;
}

nach dem aufruf vom programm, sollte zu sehen sein:
kommen
gehen

anda_skoa
21-01-2003, 18:38
Ich kenn mich mit Funktionspointern zu wenig aus (dafür hab ich virtuelle Methoden :)), aber ich denke du musst schon ein Array von pointern deklarieren, damit das klappt.

Also
void* fkt[10];

Aufruf
fkt[i]();

Ciao,
_

pik7
21-01-2003, 18:49
hallo

vieleicht so:

void (*(fkt[2]))={kommen,gehen};

aufrufen dann so:

(*(fkt[0]));
oder eben
(*(fkt[1]));


gruß

Jaipur
21-01-2003, 19:28
input:


# include < stdio.h >
# include < stdlib.h >

typedef void (*FUNKTION)();

FUNKTION fkt[3];

void kommen()
{
printf("--- kommen --- \n");
}

void hallo()
{
printf("--- hallo ---\n");
}

void gehen()
{
printf("--- gehen ---\n");
}

void mache( FUNKTION F)
{
f();
}

int main()
{
int i;

fkt[0] = kommen;
fkt[1] = hallo;
fkt[2] = gehen;

for( i=0; i<3; i++)
mache( fkt[i]);

return 0;
}


output:


--- kommen ---
--- hallo ---
--- gehen ---


geil, oder ;) ?

ReSeT
21-01-2003, 20:39
Hm, nein wird so nicht funktionieren, weil sich der Linker mit "undefined reference to `f' " verabschieden wird. Der Compiler wird sich wahrscheinlich an den ersten beiden Zeilen stören, weil Du Leerzeichen eingebaut hast.




#include <stdio.h>
#include <stdlib.h>

typedef void (*FUNKTION)();

FUNKTION fkt[3];

void kommen()
{
printf("--- kommen --- \n");
}

void hallo()
{
printf("--- hallo ---\n");
}

void gehen()
{
printf("--- gehen ---\n");
}

void mache( FUNKTION f)
{
f();
}

int main()
{
int i;

fkt[0] = kommen;
fkt[1] = hallo;
fkt[2] = gehen;

for( i=0; i<3; i++)
mache( fkt[i]);

return 0;
}

Jaipur
22-01-2003, 01:27
hi,

gut beobachtet & danke :)

das mit den leerzeichen bei den include's war nur,
weil ich nicht wusste ob das hier als html dargestellt wird oder nicht,
wollte nur auf nummer sicher gehen ...

das mit dem großen F war nur ein schreibfehler ....