2011-02-23 6 views
31

matrices de punteros de función se pueden crear de este modo:¿Cuál es la sintaxis para declarar una matriz de indicadores de función sin usar un typedef separado?

typedef void(*FunctionPointer)(); 
FunctionPointer functionPointers[] = {/* Stuff here */}; 

¿Cuál es la sintaxis para crear una matriz de punteros de función sin utilizar el typedef?

+7

Interesante pregunta, pero en código "real" que sólo debe seguir la regla de oro de los punteros de función: usar 'typedef' de lo contrario nadie va a ser capaz de entender su código . ':)' –

Respuesta

62
arr //arr 
arr [] //is an array (so index it) 
* arr [] //of pointers (so dereference them) 
(* arr [])() //to functions taking nothing (so call them with()) 
void (* arr [])() //returning void 

por lo que su respuesta es

void (* arr [])() = {}; 

Pero, naturalmente, esto es una mala práctica, sólo tiene que utilizar typedefs :)

adicional: pregunta cómo declarar una matriz de 3 punteros a las funciones que toman int y regresan un puntero a una matriz de 4 punteros a las funciones que toman el doble y vuelven a char? (¿No es genial, ¿eh? :))

arr //arr 
arr [3] //is an array of 3 (index it) 
* arr [3] //pointers 
(* arr [3])(int) //to functions taking int (call it) and 
*(* arr [3])(int) //returning a pointer (dereference it) 
(*(* arr [3])(int))[4] //to an array of 4 
*(*(* arr [3])(int))[4] //pointers 
(*(*(* arr [3])(int))[4])(double) //to functions taking double and 
char (*(*(* arr [3])(int))[4])(double) //returning char 

:))

+15

+1, pero para este tipo de masoquismo está cdecl.org. ':)' –

+6

Oh Dios mis ojos. @ _ @ – Maxpm

+0

Gracias Matteo; ¡cdecl.org es un sitio increíble! –

2

Utilice esta:

void (*FunctionPointers[])() = { }; 

Obras como todo lo demás, se coloca [] después del nombre.

10

recordar "imita delcaration utilizan". Entonces, para usar dicha matriz, diría

(*FunctionPointers[0])(); 

¿Correcto? Por lo tanto declarar que, se utiliza la misma:

void (*FunctionPointers[])() = { ... }; 
Cuestiones relacionadas