VIII. Déclarateurs complexes▲
On a, pour la déclaration des types, à distinguer deux cas :
- Les types "élémentaires" (char, int, float, enum, ..., struct, union)
- les types "complémentaires" : adresses (d'objets ou de fonctions), fonctions et tableaux
Un type de donnée peut être une combinaison plus ou moins compliquée associant des types "élémentaires" avec des types "complémentaires". Son écriture et son décodage n'est pas une chose très aisée. Rappelons l'écriture des types "complémentaires" telle qu'elle a été décrite aux chapitres précédents :
Type adresse Ta | Type tableau Tt | Type fonction Tf |
T * Ta | T Tt [] | T Tf ( T1 , T2 , ....) |
Il reste à appliquer les mêmes principes qui ont conduit
à cette syntaxe à des
déclarations plus complexes.
Quelques exemples :
- Pour déclarer que Ttp est un tableau de pointeurs sur T, on écrira que
Ttp | est tableau de pointeurs sur T |
Ttp [] | est pointeur sur T |
(*Ttp [] ) | est T |
T (*Ttp [] ) | |
T *Ttp [] | plus simplement |
- Pour déclarer que Tpt est un pointeur sur un tableau de T, on écrira que :
Tpt | est pointeur sur tableau de T |
(*Tpt ) | est tableau de T |
(*Tpt ) [] | est T |
T (*Tpt ) [] |
- Pour déclarer que T est un tableau de pointeurs sur fonction sans arguments retournant un pointeur sur int, on écrira que :
T |
est tableau de pointeurs sur fonction
sans arguments retournant un pointeur sur int |
T [] |
est pointeur sur fonction sans
arguments retournant un pointeur sur int |
(*T [] ) |
est fonction sans arguments retournant un pointeur sur int |
(*T [] ) (void) | est pointeur sur int |
*(*T [] ) (void) | est int |
int *(*T [] ) (void) |
- Que signifie la déclaration suivante : char *(*(*F) (int)) [] ?
char *(*(*F) (int)) [] | |
*(*(*F) ( int)) [] | est char; |
(*(*F) ( int)) [] | est pointeur sur char; |
(*(*F) ( int)) | est tableau de pointeurs sur char |
*(*F) ( int) | idem |
(*F) ( int) | est pointeur sur tableau de pointeurs sur char |
(*F) |
est fonction d'argument
int retournant un pointeur sur tableau de pointeurs sur char |
*F | idem |
F |
est pointeur sur fonction d'argument
int retournant un pointeur sur tableau de pointeurs sur char |