Me he encontrado con dos declaraciones de puntero que tengo problemas para 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 dado esto, parece que no puedo entender cómo evaluar los siguientes ejemplos correctamente:
Primer ejemplo
float * (* (*ptr)(int))(double **,char c)
Mi evaluación:
*(ptr)(int)*(*ptr)(int)*(*(*ptr)(int))
Luego,
double **char c
Segundo ejemplo
unsigned **( * (*ptr) [5] ) (char const *,int *)
*(ptr)[5]*(*ptr)[5]*(*(*ptr)[5])**(*(*ptr)[5])
¿Cómo debería leerlos?