Mi sono imbattuto in due dichiarazioni puntatore che ho difficoltà a capire. La mia comprensione delle regole di precedenza è simile a questa:
Operator             Precedence             Associativity
(), [ ]                  1                  Left to Right
*, identifier            2                  Right to Left
Data type                3
Ma anche dato questo, non riesco a capire come valutare correttamente i seguenti esempi:
Primo esempio
float * (* (*ptr)(int))(double **,char c)
La mia valutazione:
-    *(ptr)
-    (int)
-    *(*ptr)(int)
-    *(*(*ptr)(int))
Poi,
-    double **
-    char c
Secondo esempio
unsigned **( * (*ptr) [5] ) (char const *,int *)
-    *(ptr)
-    [5]
-    *(*ptr)[5]
-    *(*(*ptr)[5])
-    **(*(*ptr)[5])
Come dovrei leggerli?