Eu me deparei com duas declarações de ponteiro que estou tendo problemas para entender. Meu entendimento das regras de precedência é mais ou menos assim:
Operator Precedence Associativity
(), [ ] 1 Left to Right
*, identifier 2 Right to Left
Data type 3
Mas, mesmo considerando isso, não consigo descobrir como avaliar os seguintes exemplos corretamente:
Primeiro exemplo
float * (* (*ptr)(int))(double **,char c)
Minha avaliação:
*(ptr)(int)*(*ptr)(int)*(*(*ptr)(int))
Então,
double **char c
Segundo exemplo
unsigned **( * (*ptr) [5] ) (char const *,int *)
*(ptr)[5]*(*ptr)[5]*(*(*ptr)[5])**(*(*ptr)[5])
Como devo lê-los?