Beruflich Dokumente
Kultur Dokumente
Département d’Informatique
Faculté des Sciences, Université Ibn Zohr
Agadir
melansari@gmail.com
Filière: SMI4
Module: Algorithmique & Structures de données
Exemple: un point d’un plan 2-D est caractérisé par ses coordonnées
x et y. Supposant que les coordonnées sont des entiers, la strucure
décrivant un point est déclarée en C par:
struct point{
int x;
int y;
};
struct date{
struct complex{
int jour;
int real;
int mois;
int imaginary;
int annee;
};
};
Pr. Mohamed EL ANSARI (FS-Agadir) Les structures en C 5 / 36
Dé clarations
/*
struct point{
int x;
int y;
};
/* Programme principal */
int main(int argc, char *argv[])
{
struct point p;
struct point q, r;
struct point t[20];
return 0;
}
Différentes initialisations
#include<stdio.h>
struct point{
int x;
int y;
};
Sortie du programme
int main(int argc, char* argv[]) a = (2,3)
{ b = (2,0)
struct point a = {2,3}, b = {2}; c = (0,0)
struct point c = {}, d ; d = (134513833,8601588)
printf("a = (%d,%d)\n", a.x, a.y);
printf("b = (%d,%d)\n", b.x, b.y);
printf("c = (%d,%d)\n", c.x, c.y);
printf("d = (%d,%d)\n", d.x, d.y);
return 0;
}
#include<stdio.h>
#define MAX 12
struct vect{
int taille;
float array[MAX];
};
#define MAX 20
struct id {
char firstname[MAX];
char lastname[MAX];
};
struct people { Pas d’ambigüité dans la
struct id id; ligne struct id id; de
la structure people:
int age;
id est une variable
};
membre
int main(int argc,char* argv[]){ le type de id est
struct people p; struct id
strcpy(p.id.firstname,"xxxx");
strcpy(p.id.lastname,"yyyy");
p.age=943;
return 0;
}
Pr. Mohamed EL ANSARI (FS-Agadir) Les structures en C 17 / 36
Organisation des champs
Les chams sont organisés dans l’ordre de leurs déclarations dans la structure.
struct foo{
int a;
char b; Sortie
float c;
0xbfc98bb4
};
0xbfc98bb8
int main(int argc,char* argv[]){
0xbfc98bbc
struct foo f;
0xbfc98bb4
printf("%p\n",&(f.a));
printf("%p\n",&(f.b));
printf("%p\n",&(f.c)); L’adresse d’une structure
printf("%p\n",&f); = l’adresse de son premier
return 0; champ.
}
Erreur de compilation:
le champ ‘‘suivant’’ a un type incomplet
On peut mettre comme membre un pointeur sur la structure
elle-même puisque la taille d’un pointeur est connue.
struct liste{
int valeur;
struct liste * suivant;
};Mohamed EL ANSARI (FS-Agadir)
Pr. Les structures en C 22 / 36
Structures et fonctions
Tableau de structures
struct key{
char *word;
int count;
} keytab[ ] = {
"auto",2,
"break",7,
"case",3 };
La structure point:
typedef struct point POINT;
...
POINT p1,p2; /* declaration de deux points */
POINT p3[10]; /* tableau de 10 points */
POINT *p4; /* pointeur sur un point */
p4 = malloc(10*sizeof(POINT)); /* allocation de l’espace
memoire pour 10 points */
struct point{
int x; Définition de la structure
int y; struct point .
}; typedef fait appel à
typedef struct point point; struct point pour créer le
nouveau type point.
main(){ Pas d’ambiguı̈té: le nouveau
point p, q = {3,-6}; type point peut prendre le
point * r; même nom que celui de la
point s[20]; structure (struct point).
}
typedef struct{
int x;
int y;
} point; Aucun nom n’a été attribué à la
structure.
main(){ Le type struct point n’existe
point p, q = {3,-6}; pas.
point * r;
point s[20];
}