Concepts en C

Cohérence, logique et fonctionnement du C


précédentsommairesuivant

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
* idem
  est pointeur sur fonction d'argument int
retournant un pointeur sur tableau
de pointeurs sur char

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.