IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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 ne sont 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

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.