2012-03-12 19 views
7

Sto avendo davvero molto tempo a comprendere la sintassi per i puntatori di funzione. Quello che sto cercando di fare è avere una serie di puntatori di funzioni, che non accettano argomenti e restituisce un puntatore vuoto. Qualcuno può aiutarti?Array of function pointers in C

+5

Generalmente riceverai una risposta migliore se pubblichi un codice che hai provato, anche se non funziona, e ti spieghi meglio che puoi esattamente quale sia il problema. Dimostra più impegno da parte tua. –

+0

controlla questo [link] (http://c-faq.com/decl/spiral.anderson.html) – Vikram

risposta

16
  1. Prima di tutto, si dovrebbe conoscere cdecl:

    cdecl> declare a as array 10 of pointer to function(void) returning pointer to void 
    void *(*a[10])(void) 
    
  2. È possibile farlo a mano - basta costruire dall'interno:

    a

    è un array:

    a[10]

    di puntatori:

    *a[10]

    alle funzioni:

    (*a[10])

    che assumono senza argomenti:

    (*a[10])(void)

    re girando void *:

    void *(*a[10])(void)

  3. E 'molto meglio se si utilizzano typedef per rendere la vita più facile:

    typedef void *(*func)(void); 
    

    E poi fare la matrice:

    func a[10]; 
    
+0

Nota: il link all'inizio è molto utile! – Ziezi

2

Usa typedef s

typedef void* func(void); 
func *arr[37]; 
7

Ogniqualvolta la sintassi composta diventa troppo complicata, un typedef di solito cancella le cose.

E.g.

typedef void *(* funcPtr)(void); 

funcPtr array[100]; 

Quali senza il typedef Credo che sarebbe simile:

void *(* array[100])(void); 
2

Inizia con il nome della matrice e il tuo lavoro fuori, ricordando che [] e () legano prima * (*a[] è un array di puntatore, (*a)[] è un puntatore ad un array, *f() è una funzione che restituisce un puntatore, (*f)() è un puntatore a una funzione):

 farr    -- farr 
     farr[N]   -- is an N-element array 
     *farr[N]   -- of pointers 
     (*farr[N])( )  -- to functions 
     (*farr[N])(void)  -- taking no arguments 
    *(*farr[N])(void)  -- and returning pointers 
void *(*farr[N])(void); -- to void