95
LAL - Orsay 1 Introduction au Langage C

1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

Embed Size (px)

Citation preview

Page 1: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

1

Introduction au Langage C

Page 2: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

2

Structure générale d'une application C

Fichier sourceFichier source

Fichier sourceFichier source

Fichier sourceFichier source

Fichier source

Page 3: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

3

Structure générale d'une application C

Fichier sourceFichier source

Fichier sourceFichier source

Fichier sourceFichier source

Fichier source

Fichier source

déclaration

déclaration

...

fonction

fonction

...

Page 4: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

4

Structure générale d'une application C

Fichier source

déclaration

déclaration

...

fonction

fonction

...

float Valeur;int Tableau [100];

Variables globales

typedef enum{

faux,vrai

} booleen;

typedef void* Pointeur;

Types

Page 5: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

5

Structure générale d'une application C

fonctionFichier source

déclaration

déclaration

...

fonction

fonction

...

int division (int v1, int v2){

/* déclarations locales*/

/*instructions executables

*/}

Page 6: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

6

int addition (int v1, int v2){

int resultat;

resultat = v1 + v2;

return (resultat);}

fonction

Structure générale d'une application C

Fichier source

déclaration

déclaration

...

fonction

fonction

...

Page 7: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

7

Structure générale d'une application C

int division (int v1, int v2){

int resultat = 0;

if (v2 == 0){

printf ("erreur! \n");}else{

resultat = v1 / v2;}return (resultat);

}

fonction

Fichier source

déclaration

déclaration

...

fonction

fonction

...

Page 8: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

8

Fichier source

déclaration

déclaration

...

fonction «main»

fonction

...

Structure générale d'une application C

int main (){}

fonction

Page 9: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

9

Déclarations : types et variables.

Type = modèle pour les objets

Variable = objet réalisé selon un des modèles

Page 10: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

10

Déclarations : types et variables.

Type = modèle pour les objets

charshortintlong

floatdoubletypes simples

Page 11: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

11

Déclarations : types et variables.

int valeur;

double nombre = 123.456;double autreNombre = nombre * 3;

float Pi = 3.1415926;

int largeur, hauteur;

char code = 'x';

valeur :

nombre : 123.456

autreNombre : 370.368

Pi : 3.1415926

largeur :

hauteur :

code : 'x'

Page 12: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

12

Déclarations : types et variables.

int valeur;

double nombre = 123.456;double autreNombre = nombre * 3;

float Pi = 3.1415926;

int largeur, hauteur;

char code = 'x';

valeur :

nombre : 123.456

autreNombre : 370.368

Pi : 3.1415926

largeur :

hauteur :

code : 'x'

Page 13: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

13

Déclarations : types et variables.

int valeur;

double nombre = 123.456;double autreNombre = nombre * 3;

float Pi = 3.1415926;

int largeur, hauteur;

char code = 'x';

valeur :

nombre : 123.456

autreNombre : 370.368

Pi : 3.1415926

largeur :

hauteur :

code : 'x'

Page 14: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

14

Déclarations : types et variables.

int valeur;

double nombre = 123.456;double autreNombre = nombre * 3;

float Pi = 3.1415926;

int largeur, hauteur;

char code = 'x';

valeur :

nombre : 123.456

autreNombre : 370.368

Pi : 3.1415926

largeur :

hauteur :

code : 'x'

Page 15: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

15

Déclarations : types et variables.

int valeur;

double nombre = 123.456;double autreNombre = nombre * 3;

float Pi = 3.1415926;

int largeur, hauteur;

char code = 'x';

valeur :

nombre : 123.456

autreNombre : 370.368

Pi : 3.1415926

largeur :

hauteur :

code : 'x'

Page 16: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

16

Déclarations : types et variables.

int valeur;

double nombre = 123.456;double autreNombre = nombre * 3;

float Pi = 3.1415926;

int largeur, hauteur;

char code = 'x';

valeur :

nombre : 123.456

autreNombre : 370.368

Pi : 3.1415926

largeur :

hauteur :

code : 'x'

Page 17: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

17

Instructions exécutables.

assignations, expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

Page 18: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

18

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

void f (){

int nombre;float valeur;

nombre = 123;valeur = nombre * 3;

}

Page 19: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

19

Instructions exécutables.

Opérateurs

+ - * / %

! && ||

== >= <= !=

arithmétiques

logiques

comparaisons

<< >> & | ^ ~binaires

+= -= *= /= %=

<<= >>= &= |= ^= ~=

Page 20: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

20

Instructions exécutables.

Opérateurs

+ - * / %

! && ||

== >= <= !=

arithmétiques

logiques

comparaisons

<< >> & | ^ ~binaires

+= -= *= /= %=

<<= >>= &= |= ^= ~=

modulo

Page 21: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

21

Instructions exécutables.

Opérateurs

+ - * / %

! && ||

== >= <= !=

arithmétiques

logiques

comparaisons

<< >> & | ^ ~binaires

+= -= *= /= %=

<<= >>= &= |= ^= ~=

décalage (droite - gauche)

Page 22: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

22

Instructions exécutables.

Opérateurs

+ - * / %

! && ||

== >= <= !=

arithmétiques

logiques

comparaisons

<< >> & | ^ ~binaires

+= -= *= /= %=

<<= >>= &= |= ^= ~=

and - or - xor

Page 23: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

23

Instructions exécutables.

Opérateurs

+ - * / %

! && ||

== >= <= !=

arithmétiques

logiques

comparaisons

<< >> & | ^ ~binaires

+= -= *= /= %=

<<= >>= &= |= ^= ~=

bit-not

Page 24: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

24

Instructions exécutables.

Opérateurs

+ - * / %

! && ||

== >= <= !=

arithmétiques

logiques

comparaisons

<< >> & | ^ ~binaires

+= -= *= /= %=

<<= >>= &= |= ^= ~=

not

Page 25: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

25

Instructions exécutables.

Opérateurs

+ - * / %

! && ||

== >= <= !=

arithmétiques

logiques

comparaisons

<< >> & | ^ ~binaires

+= -= *= /= %=

<<= >>= &= |= ^= ~=

and - or

Page 26: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

26

Instructions exécutables.

Opérateurs

+ - * / %

! && ||

== >= <= !=

arithmétiques

logiques

comparaisons

<< >> & | ^ ~binaires

+= -= *= /= %=

<<= >>= &= |= ^= ~=

égalité

Page 27: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

27

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

void f (){

int nombre;enum {negatif, positif} signe;

if (nombre >= 0) signe = positif;else signe = negatif;

}

Page 28: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

28

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

void f (){

int nombre;enum {negatif, nul, positif} signe;

if (nombre > 0) signe = positif;else if (nombre < 0) signe = negatif;else signe = null;

}

Page 29: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

29

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

void f (){

int nombre = 1;int compteur;

for (compteur = 0; compteur < 10; compteur++)

nombre *= 3;}

Page 30: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

30

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

void f (){

int nombre = 1;int compteur;

compteur = 0;do{

nombre *= 3;if (nombre > 100) break;compteur++;

} while (compteur < 10);}

Page 31: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

31

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

void f (){

int nombre = 1;int compteur;

compteur = 0;while (compteur < 10){

nombre *= 3;if (nombre > 100) break;compteur++;

}}

Page 32: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

32

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

void f (){

int nombre = 1;int compteur;

for (compteur = 0; compteur < 10; compteur++){

nombre *= 3;if (nombre > 100) return;

}}

Page 33: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

33

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

int f (){

int nombre = 1;int compteur;

for (compteur = 0; compteur < 10; compteur++){

nombre *= 3;if (nombre > 100) break;

}

return (nombre);}

Page 34: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

34

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

void f (){

int nombre;enum {negatif, nul, positif} signe;

if (nombre > 0) signe = positif;else if (nombre < 0){

signe = negatif;nombre = - nombre;

}else signe = negatif;

}

Page 35: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

35

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

void f (){

int nombre = 1;int compteur;

for (compteur = 0; compteur < 10; compteur++){

nombre *= 3;if (nombre > 100) break;

}}

Page 36: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

36

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

int addition (int val1, int val2);

void f (){

int nombre;

nombre = addition (12, 34);}

Page 37: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

37

Le prototypage des fonctions.

Permet de déclarer les fonctions :

leur type

le type de leurs arguments

Necessaire avant toute utilisation des fonctions.

Exemple :

int affiche (char* message);

Page 38: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

38

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

double sin (double angle);

void f (){

float valeur;

valeur = sin (PI/6);}

Page 39: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

39

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

void* get_next_item ();

void f (){

void* reference;

reference = get_next_item ();}

Page 40: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

40

Instructions exécutables.

assignations , expressions

controles

testsif

bouclesfor, do, while, break

fins de fonctionsreturn

blocs

appels de fonctions

void start (int parametre);void stop ();

void f (){

start (10);stop ();

}

Page 41: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

41

Fichier source

déclaration

déclaration

...

fonction

fonction

...

Visibilité des définitions.

Définitions globales :

visibles (accessibles) à

partir des autres fichiers.

Page 42: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

42

Visibilité des définitions.

Définitions locales :

Les arguments des

fonctions.

Tout ce qui est défini à

l'interieur d'un bloc.

int addition (int v1, int v2){

int resultat;

resultat = v1 + v2;if (resultat){

int temp;temp = -resultat;resultat = temp;

}return (resultat);

}

Page 43: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

43

Déclarations : types et variables.

Type = modèle pour les objets

enum booleen{

faux,vrai

}

types simples : énumérations

Page 44: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

44

Déclarations : types et variables.

enum booleen{

faux,vrai

} valeur;

enum {

bleu,blanc,rouge

} couleur = rouge;

valeur :

couleur : rouge

Page 45: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

45

Déclarations : types et variables.

Type = modèle pour les objets

int x[100];char string[80];float valeur[10][5]

types complexes : les tableaux

Page 46: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

46

Déclarations : types et variables.

void f(){ float valeur[2][5];

valeur[1][2] = 10;}

valeur [0][0]:valeur [1][0]:valeur [0][1]:valeur [1][1]:valeur [0][2]:valeur [1][2]:valeur [0][3]:valeur [1][3]:valeur [0][4]:valeur [1][4]:

Page 47: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

47

Déclarations : types et variables.

void f(){ float valeur[2][5];

valeur[1][2] = 10;}

valeur [0][0]:valeur [1][0]:valeur [0][1]:valeur [1][1]:valeur [0][2]:valeur [1][2]: 10valeur [0][3]:valeur [1][3]:valeur [0][4]:valeur [1][4]:

Page 48: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

48

Déclarations : types et variables.

Type = modèle pour les objets

struct point{

int x;int y;

}

types complexes : les structures

Page 49: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

49

Déclarations : types et variables.

struct Point{

int x;int y;

} sommet = {12, 23};

sommet.x : 12sommet.y : 23

Page 50: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

50

Déclarations : types et variables.

struct Point{

int x;int y;

} sommet = {12, 23};

sommet.x : 12sommet.y : 23

struct Point p[4];

p[0].x :p[0].y :p[1].x :p[1].y :p[2].x :p[2].y :p[3].x :p[3].y :

Page 51: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

51

Déclarations : types et variables.

struct Point{

int x;int y;

} image[100];

struct{

float hauteur;float largeur;enum couleur fond;

} rectangle;

image [0].x : image [0].y :

rectangle.hauteur :rectangle.largeur :rectangle.fond :

image [1].x : image [1].y :

image [2].x : image [2].y :

...

Page 52: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

52

Déclarations : types et variables.

struct quadrilatere{

struct Point sommet[4];enum couleur fond;

} rectangle, carre;

carre.sommet[0].x :carre.sommet[0].y :carre.sommet[1].x :carre.sommet[1].y :carre.sommet[2].x :carre.sommet[2].y :carre.sommet[3].x :carre.sommet[3].y :carre.fond :

Page 53: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

53

Déclarations : types et variables.

Type = modèle pour les objets

struct Point*void*

les pointeurs

char*double*enum booleen*

Page 54: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

54

Les pointeurs en C.

float valeur;void* pointeur;

pointeur :

valeur :

Page 55: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

55

Les pointeurs en C.

pointeur :

void f (){

float valeur;void* pointeur;

pointeur = &valeur;}

valeur :

Page 56: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

56

Les pointeurs en C.

void f (){

int nombre;float valeur;void* pointeur;

pointeur = &valeur;}

pointeur :

valeur :

nombre :

Page 57: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

57

Les pointeurs en C.

void f (){

int nombre;float valeur;void* pointeur;

pointeur = &valeur;pointeur = &nombre;

}

pointeur :

valeur :

nombre :

Page 58: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

58

Les pointeurs en C.

void f (){

int nombre;int* p1 = &nombre;

nombre = 10;*p1 = 10;

}

Ecritures équivalentes

Page 59: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

59

Allocation de mémoire en C : malloc et free.

typedef struct{

int x, y;} Point;

main (){

Point* p1;

p1 = (Point*) malloc (sizeof(Point));free (p1);

}

Définition du type Point.

Page 60: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

60

typedef struct{

int x, y;} Point;

main (){

Point* p1;Point* p2;

p1 = (Point*) malloc (sizeof(Point));free (p1);

}

Allocation de mémoire en C : malloc et free.

Déclaration de deux pointeurssur des types Point.

Page 61: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

61

typedef struct{

int x, y;} Point;

main (){

Point* p1;

p1 = (Point*) malloc (sizeof(Point));free (p1);

}

Allocation de mémoire en C : malloc et free.

Allocation d'une structure Point : p1 la désigne.

Page 62: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

62

typedef struct{

int x, y;} Point;

main (){

Point* p1;

p1 = (Point*) malloc (sizeof(Point));free (p1);

}

Allocation de mémoire en C : malloc et free.

Libération de la mémoire. p1 nedésigne plus rien.

Page 63: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

63

typedef struct{

int x, y;} Point;

main (){

Point* p1;Point* p2;

p1 = (Point*) malloc (sizeof(Point));free (p1);

}

Allocation de mémoire en C : malloc et free.

p1 :

p2 :

Page 64: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

64

Allocation de mémoire en C : malloc et free.

typedef struct{

int x, y;} Point;

main (){

Point* p1;Point* p2;

p1 = (Point*) malloc (sizeof(Point));free (p1);

}

p1 : 0x12345678

p2 :

p1->x :p1->y :

Page 65: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

65

Allocation de mémoire en C : malloc et free.

typedef struct{

int x, y;} Point;

main (){

Point* p1;Point* p2;

p1 = (Point*) malloc (sizeof(Point));free (p1);

}

p1 : 0x12345678

p2 :

Page 66: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

66

Allocation de mémoire en C : malloc et free.

typedef struct{

int x, y;} Point;

main (){

Point* p1;

p1 = (Point*) malloc (sizeof(Point));p1->x = 10;p1->y = p1->x * 2;free (p1);

}

Page 67: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

67

Les tableaux de pointeurs

Des objets alloués en mémoire :

main (){

Point* p;

p = (Point*) malloc (sizeof(Point));p = (Point*) malloc (sizeof(Point));p = (Point*) malloc (sizeof(Point));p = (Point*) malloc (sizeof(Point));p = (Point*) malloc (sizeof(Point));

}

Page 68: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

68

Les tableaux de pointeurs

main (){

Point* p[10];int i;

for (i = 0; i < 10; i++) p[i] = NULL;}

Page 69: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

69

Les tableaux de pointeurs

main (){

Point* p[10];

p[0] = malloc (sizeof(Point));}

Page 70: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

70

Les tableaux de pointeurs

main (){

Point* p[10];

p[0] = malloc(sizeof(Point));p[1] = malloc(sizeof(Point));

}

Page 71: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

71

Des ensembles : tableaux et listes.

#include "list.h"

main (){

List liste;

liste = ListCreate ();}

liste :

.first :

.last :

Page 72: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

72

Des ensembles : tableaux et listes.

p :

liste :

.first :

.last :

#include "list.h"

main (){

List liste;Point* p;

liste = ListCreate ();p = malloc (sizeof(Point));

}

Page 73: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

73

Des ensembles : tableaux et listes.

#include "list.h"

main (){

List liste;Point* p;

liste = ListCreate ();p = malloc (sizeof(Point));ListAddEntry (liste, p);

}

liste :

p :.first :.last :

.reference :

Page 74: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

74

Des ensembles : tableaux et listes.

#include "list.h"

main (){

List liste;Point* p;

liste = ListCreate ();p = malloc (sizeof(Point));ListAddEntry (liste, p);

}

liste :

p :.first :.last :

.reference :

Page 75: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

75

Des ensembles : tableaux et listes.

#include "list.h"

main (){

List liste;Point* p;

liste = ListCreate ();p = malloc (sizeof(Point));ListAddEntry (liste, p);p = malloc (sizeof(Point));

}

liste :

p :.first :.last :

.reference :

Page 76: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

76

Des ensembles : tableaux et listes.

#include "list.h"

main (){

List liste;Point* p;

liste = ListCreate ();p = malloc (sizeof(Point));ListAddEntry (liste, p);p = malloc (sizeof(Point));ListAddEntry (liste, p);

}

liste :

p :.first :.last :

.reference :

.reference :

Page 77: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

77

Des ensembles : tableaux et listes.

#include "list.h"

main (){

List liste;Point* p;

liste = ListCreate ();p = malloc (sizeof(Point));ListAddEntry (liste, p);p = malloc (sizeof(Point));ListAddEntry (liste, p);

}

liste :

p :.first :.last :

.reference :

.reference :

Page 78: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

78

Des ensembles : tableaux et listes.

liste :

.first :

.last :

.reference :

.reference :

.reference :

.reference :

#include "list.h"

main (){

List liste;Point* p;int i;

liste = ListCreate ();for (i=0; i < 4; i++){

p = malloc (sizeof(Point));ListAddEntry (liste, p);

}}

Page 79: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

79

.first :

.last :current :

.reference :

.reference :

.reference :

.reference :next :

next :

next :

next : 0

Des ensembles : tableaux et listes.

Chaînage dans les listes.

Page 80: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

80

Des ensembles : tableaux et listes.

main (){

List liste;Point* p;

liste = ...;ListStartLoop (liste);

}

.first :

.last :current :

.reference :

.reference :

.reference :

.reference :next :

next :

next :

next : 0

Page 81: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

81

Des ensembles : tableaux et listes.

.first :

.last :current :

.reference :

.reference :

.reference :

.reference :next :

next :

next :

next : 0

main (){

List liste;Point* p;

liste = ...;ListStartLoop (liste);while (( p = ListGetNextEntry(liste) )){

p->x = 0;p->y = 10;

}}

Page 82: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

82

Une liste multiforme.

main (){

List liste;Point* p;Ligne* l;

liste = ListCreate ();p = malloc (sizeof(Point));ListAddEntry (liste, p);l = malloc (sizeof(Ligne));ListAddEntry (liste, l);

}

liste :

p :

.first :

.last :

.reference :

.reference :

l :

Page 83: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

83

Une liste multiforme : problème

Polygone Point Ligne Ligne

x, y x1, y1x2, y2

x1, y1x2, y2x1, y1

x2, y2...xn, yn

Page 84: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

84

Une liste multiforme : construction

Polygone Point Ligne Ligne

x, y x1, y1x2, y2

x1, y1x2, y2x1, y1

x2, y2...xn, yn

.ref .ref .ref .ref

Page 85: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

85

Une liste multiforme.

Polygone Point Ligne Ligne

x, y x1, y1x2, y2

x1, y1x2, y2x1, y1

x2, y2...xn, yn

.ref.ref .ref .ref.next .next .next .next

.first

.last

Page 86: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

86

Une liste multiforme.

.ref.ref .ref .ref.next .next .next .next

.first

.last

? ? ? ?

Page 87: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

87

Une liste multiforme.

.ref.ref .ref .ref.next .next .next .next

.first

.last

.type: .type: .type: .type:

Page 88: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

88

Une liste multiforme.

.ref.ref .ref .ref.next .next .next .next

.first

.last

.type: Point

.x, .y:

.type: Ligne

.x1, .y1:

.x2, .y2:

.type: Ligne

.x1, .y1:

.x2, .y2:

.type: Polygone

.x1, .y1:

.x2, .y2:

...

.xn, .yn:

Page 89: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

89

Une liste multiforme.

.ref.ref .ref .ref.next .next .next .next

.first

.last

.type: Point

.x, .y:

.type: Ligne

.x1, .y1:

.x2, .y2:

.type: Ligne

.x1, .y1:

.x2, .y2:

.type: Polygone

.x1, .y1:

.x2, .y2:

...

.xn, .yn:

Page 90: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

90

Une liste multiforme.

.x, .y: .x1, .y1:.x2, .y2:

.x1, .y1:

.x2, .y2:.x1, .y1:.x2, .y2:....xn, .yn:

.type: .type: .type: .type:

Page 91: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

91

Une liste multiforme.

.figure:

.x, .y:.figure:.x1, .y1:.x2, .y2:

.figure:

.x1, .y1:

.x2, .y2:

.figure:

.x1, .y1:

.x2, .y2:

...

.xn, .yn:

.type:

Page 92: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

92

Une liste dans une structure.

.figure: FigurePolygone

.x1, .y1:

.x2, .y2:

...

.xn, .yn:

main (){

Polygone* poly;

poly = malloc (sizeof(Polygone));poly->figure.type = FigurePolygone;poly->x1 = ...;etc...

}

Page 93: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

93

Une liste dans une structure.

.figure: FigurePolygone

.lignes:

main (){

Polygone* poly;

poly = malloc (sizeof(Polygone));poly->figure.ident = FigurePolygone;poly->lignes = ListeCreate ();

}.first.last

Page 94: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

94

Une liste dans une structure.

.figure: FigurePolygone

.lignes:

main (){

Polygone* poly;Ligne* ligne;

poly = malloc (sizeof(Polygone));poly->figure.ident = FigurePolygone;poly->lignes = ListeCreate ();ligne = malloc (sizeof(Ligne));ListAddEntry (poly->lignes, ligne);

}.first.last

.figure: Ligne.x1, .y1:.x2, .y2:

Page 95: 1 LAL - Orsay Introduction au Langage C. 2 LAL - Orsay Structure générale d'une application C Fichier source

LAL - Orsay

95

Une liste dans une structure.

.figure: FigurePolygone

.lignes:

main (){

Polygone* poly;Ligne* ligne;

poly = malloc (sizeof(Polygone));poly->figure.ident = FigurePolygone;poly->lignes = ListeCreate ();ligne = malloc (sizeof(Ligne));ListAddEntry (poly->lignes, ligne);ligne = malloc (sizeof(Ligne));ListAddEntry (poly->lignes, ligne);

}.first.last

.figure: Ligne.x1, .y1:.x2, .y2:

.figure: Ligne.x1, .y1:.x2, .y2: