Académique Documents
Professionnel Documents
Culture Documents
Programmation Imprative I
Rim Chaabane rchaabane@ai.univ-paris8.fr
- Cours 5 -
- Cours 5 -
La dfinition dun type structure ne peut tre prcd du mot cl const. Il faut considrer la
dfinition dun type struct comme si vous dfinissez un nouveau type en C. Tout type en C ne
peut tre constant. Par contre une donne dun type quelconque peut tre dclare comme
constante. Ainsi, il est autoris de dclarer des valeurs de type struct comme constantes. Par
exemple :
const struct point A ;
};
Deuxime mthode
Troisime mthode
struct personne{
char nom[20];
char prenom[20];
int no_employe;
};
struct {
char nom[20];
char prenom[20];
int no_employe;
} p1,p2;
struct{
char nom[20];
char prenom[20];
int no_employe;
} p3;
struct personne{
char nom[20];
char prenom[20];
int no_employe;
} p1,p2;
p3 = p1 ; /* OK */
La premire mthode, dfinit un type structure dont le nom est personne. Cette structure
contient trois champs : un tableau de caractres pour le champ nom, un tableau de caractres
pour le champ prenom et un entier pour le champ no_employe.
Plus loin de cette dclaration, nous dclarons deux variables p1 et p2 de type struct
personne.
Avec cette mthode, il est possible daffecter p1 la valeur de p2, ces deux variables tant
reconnues comme tant du mme type.
2
- Cours 5 -
La deuxime mthode dfinit le mme type de structure, sauf que cette fois-ci la structure ne
porte pas de nom et est immdiatement suivie des noms de variables p1 et p2 de ce type
structure. Si plus loin on crit la mme dfinition du type de structure (sans nom) suivi dun nom
de variable p3, alors il nous sera possible deffectuer des oprations entre p1 ou p2 et p3.
La troisime mthode dfinit un type structure avec le nom personne suivi immdiatement des
noms de variables p1 et p2. Dans cas si lon cre comme la mthode 1, une troisime variable
p3 de type struct personne, il nous sera impossible deffectuer une quelconque opration
entre p1 ou p2 et p3. Ce dernier ntant pas reconnu comme tant du mme type que p1 et p2.
De ces trois mthodes c'est la premire qui est recommande, car elle permet de bien sparer la
dfinition du type structure de ses utilisations.
1.2.
Reprsentation en mmoire
La norme impose aux objets de type structure les deux contraintes suivantes :
- les champs doivent tre allous selon leur ordre dapparition dans la structure ;
- ladresse dune structure correspond ladresse de son premier champ.
Ainsi dans les dfinitions suivantes, lordre dapparition des champs est le mme :
struct s1 {
int n, p ;
float x, y ;
};
struct s2 {
int n ;
int p ;
float x ;
float y;
};
struct s1 test ;
@m
n
1.3.
@m+1
p
@m+2
x
@m+3
y
test
Initialisation
struct personne p2 ;
3
- Cours 5 -
/* mthode 2 */
Pour accder aux champs de la variable p2, il suffit de faire suivre le nom de la variable dun point
suivi du nom du champ.
Nous pouvons, alors noter quil est plus simple dinitialiser un tableau de structures avec la
premire mthode. La seconde mthode est plutt prconise dans le cas ou les donnes du
tableau ne sont pas connues en dbut de programme. Exemple : le programme lit les donnes du
tableau de structures partir dun fichier de donnes.
Pour initialiser une variable de type structure, il nest pas ncessaire de renseigner tous les champs
de la structure. Par exemple :
struct personne tab[3] = { {"Dupond", "Jean", 7845}, /* Correct */
{"Le Notre",}, /* Correct */
/* le troisime lment du
tableau napparait pas mais
tant donn que cest le dernier
son absence ne gne pas la
compilation */
};
Il est galement possible daffecter une valeur de structure une autre, exemple :
struct personne p1, p2 = {"Dupond", "Jean", 7845};
p1=p2 ;
1.4.
Exemple dutilisation
- Cours 5 -
- Cours 5 -
pn=&t[2] ;
Nous initialisons donc de cette faon une variable de type pointeur avec des adresses mmoire
dobjets de types int.
Pour accder au contenu dune adresse mmoire, il faut faire appel au pointeur prcd dune
toile comme ci-dessous :
*pn = 20 ; /* on place lentier 20 dans ladresse mmoire contenue dans pn */
Instruction C
description
Valeur
contenue
dans @m
int n = 3;
int * pn ;
pn = &n ;
int l = *pn ;
*pn = 9 ;
printf("%d\n",
*pn) ;
Rsultat
3
3
pn = @m
l = 3
pn = @m
n = 9
*(@m)= 9
9
Affectation de pointeur :
p=NULL ;