2013-08-24 7 views
8

Più di una questione di curiosità che altro. Fondamentalmente voglio sapere se è possibile dichiarare più puntatori a funzione in una linea, qualcosa come:Come si dichiarano più puntatori di funzione in una singola riga senza dover digitare?

int a = 1, b = 2; 

Con puntatori a funzione? Senza dover ricorrere a typedef.

Ho provato void (*foo = NULL, *bar = NULL)(int). Non sorprendentemente, questo non ha funzionato.

+0

Mentre ho indovinato correttamente, devo dire che non ho mai visto (per una buona ragione) o provato prima. – chris

+0

potente nel mondo del codice offuscato ... solo bisogno di un paio di # def per rappresentarli come 6 caratteri di sottolineatura e siete in affari! –

risposta

10

Prova come segue:

void (*a)(int), (*b)(int); 

void test(int n) 
{ 
    printf("%d\n", n); 
} 
int main() 
{ 
    a = NULL; 
    a = test; 
    a(1); 
    b = test; 
    b(2); 
    return 0; 
} 

EDIT:

Un'altra forma è array di puntatori a funzione:

void (*fun[2])(int) = {NULL, NULL}; 

void test(int n) 
{ 
    printf("%d\n",n); 
} 
int main() 
{ 
    fun[0] = NULL; 
    fun[0] = test; 
    fun[0](1); 
    fun[1] = test; 
    fun[1](2); 
} 
+1

Sì, scrivi le tue dichiarazioni dopo 'test() {}' come ['void (* a) (int) = test, (* b) (int) = test;'] (http: // codepad.org/XkYPuwer) –

+0

@GrijeshChauhan Penso che il secondo modulo che ho appena editato sia più probabilmente quello che RD vuole – vvy

+0

potrebbe essere, ma Eccellente risposta, Ottima risposta. –

4
void (*foo)(int) = NULL, (*bar)(int) = NULL; 

o come Grijesh dice:

int main(void) { 
    int a[5], b[55]; 
    int (*aa)[5] = &a, (*bb)[55] = &b; 
    return 0; 
} 
+1

si potrebbe desiderare di aggiungere allo stesso modo un puntatore alla dichiarazione dell'array può essere fatto: 'int (* a) [5], (* b) [7];' ecco un [collegamento codepade] (http://codepad.org/ ODgCNXdq) –

+0

No, ho detto per gli array di aprire il collegamento del codepad. –

+0

Grazie Grijesh;) –

Problemi correlati