Al margen, una vez que entienda cómo funciona la sintaxis de declaración de C y C++ podrá crear elementos mucho más complicados. Por ejemplo:
//: V1C03:ComplicatedDefinitions.cpp /* 1. */ void * (*(*fp1)(int))[10]; /* 2. */ float (*(*fp2)(int,int,float))(int); /* 3. */ typedef double (*(*(*fp3)())[10])(); fp3 a; /* 4. */ int (*(*f4())[10])(); int main() {}
Estudie cada uno y use la regla derecha-izquierda para entenderlos. El número 1 dice «fp1 es un puntero a una función que toma un entero como argumento y retorna un puntero a un array de 10 punteros void».
El 2 dice «fp2 es un puntero a función que toma tres argumentos (int, int y float) y retorna un puntero a una función que toma un entero como argumento y retorna un float».
Si necesita crear muchas definiciones complicadas, quizá quiera usar typedef. El número 3 muestra cómo un typedef ahorra tener que escribir una descripción complicada cada vez. Dice «Un fp3 es un puntero a una función que no tiene argumentos y que retorna un puntero a un array de 10 punteros a funciones que no tienen argumentos y retornan doubles». Después dice «a es una variable de ese tipo fp3». En general, typedef es útil para construir descripciones complicadas a partir de otras simples.
El 4 es una declaración de función en lugar de una definición de variable. Dice «f4 es una función que retorna un puntero a un array de 10 punteros a funciones que retornan enteros».
Es poco habitual necesitar declaraciones y definiciones tan complicadas como éstas. Sin embargo, si se propone entenderlas, no le desconcertarán lo más mínimo las que, algo menos complicadas, sí encontrará en la vida real.