Me he encontrado con dos declaraciones de puntero que me cuesta entender. Mi comprensión de las reglas de precedencia es algo como esto:
Operator Precedence Associativity
(), [ ] 1 Left to Right
*, identifier 2 Right to Left
Data type 3
Pero incluso teniendo en cuenta esto, no puedo encontrar la manera de evaluar correctamente los siguientes ejemplos:
Primer ejemplo
float * (* (*ptr)(int))(double **,char c)
Mi evaluación:
-
*(ptr)
-
(int)
-
*(*ptr)(int)
-
*(*(*ptr)(int))
Entonces,
-
double **
-
char c
Segundo ejemplo
unsigned **( * (*ptr) [5] ) (char const *,int *)
-
*(ptr)
-
[5]
-
*(*ptr)[5]
-
*(*(*ptr)[5])
-
**(*(*ptr)[5])
¿Cómo debería leerlos?