sirve que para declaracion c++ c declaration

declaracion - int c++ para que sirve



La regla espiral y la ''declaraciĆ³n siguen el uso'' para analizar las declaraciones C y C++ (1)

Esta pregunta sigue a esta otra pregunta acerca de las declaraciones C. Leyendo la respuesta a esta pregunta, leí sobre la regla de la espiral y también entendí lo que significa "declaración después de uso".

Ok hasta ahora Pero luego leí esta declaración :

char *(*(*a[N])())();

y me preguntaba cómo analizarlo con la "regla ''de uso de declaración". Especialmente para la parte de matriz.

Lo que leo es:

(*(*a[N])())

es una función () devuelve un char * , luego, quita la referencia a lo siguiente

(*a[N])() // 1

es esta ''función que devuelve un char* '', por lo que 1 es un ''puntero a una función que devuelve char * '' entonces diría ''cuando se llama (*a[N]) , es [declaración anterior]''. En este punto, tenemos (*a[N]) es una función que devuelve un puntero a una función que devuelve char * .

Pero entonces no sé cómo aplicar esta regla para distinguir entre el ''puntero a la matriz'' y la ''matriz de puntero''.

¿Alguien puede aclarar esto?

Otra pregunta: ¿cuáles son las reglas de "precedencia" en tales declaraciones, entre & (en C ++), * y [] ? [quizás "precedencia" no sea el término correcto]

Para comprobar si entendí correctamente la ''regla de la espiral'', también analizo esta expresión a continuación; por favor dime si estoy equivocado

+-----------+ | +------+ | | | +-+ | | | | ^ | | | char* (*(* a[N])())(); ^ ^ ^ ^ ^ ^ | | | | | | | | +---+ | | | +--------+ | +--------------+

Para mí es más fácil (loop por loop):

  • a es una serie de N ...
  • puntero a la función de retorno ...
  • puntero a la función de retorno ...
  • char *

Pero tal vez me esté perdiendo algo que, en ese caso, me permite obtener la respuesta correcta, pero eso podría estar equivocado en otro caso más complicado.


Solo tienes que construirlo en pasos.

char *X(); // X =~ (*(*a[N])())

Función de retorno de caracteres char*

char *(*Y())(); // Y =~ (*a[N])

Función que devuelve el puntero a la función que devuelve char* .

En una declaración, al igual que en una expresión (declaración seguir uso), postfix [] tiene una prioridad más alta que unario * por lo que *a[N] es equivalente a *(a[N]) , no (*a)[N] .

char *(*(*Z)())(); // Z =~ a[N]

Puntero a función devolviendo puntero a función devolviendo char* .

char *(*(*a[N])())();

Arreglo de N punteros a funciones que devuelven un puntero a función que devuelve char* .