Vous êtes sur la page 1sur 30

Structures de donnes

Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Tableaux et chanes

COMPLEMENT C :

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Plan de la leon
Tableaux Tableaux et pointeurs Chanes de caractres
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

TABLEAUX

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Introduction
Un tableau est une suite de valeurs de mme type
14.5 12.0 0 1 15 2 13.5 3 17 4 11.5 16.5 13.5 17.5 5 6 7 8

Les indices commencent 0


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Dfinition
<type> nom[ <taille> ]; Rservation mmoire par le compilateur Valeurs ranges conscutivement en mmoire
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Oprations sur les tableaux


int t[5]
Adresse du premier lment Adresse constante Eviter t++ et t=
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Oprations sur les tableaux


int t[5] t[i] &t[i]
Elment i du tableau Adresse de llment i Nombre doctets

sizeof (t)
Prof. A. EL FAKER

ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Oprations sur les tableaux


Laffectation et la comparaison de tableaux nexistent pas mais pas interdites !! Il faut faire une boucle main(){ int a[5]; static int b[5]={4,1,2,0,3}; for (int i=0; i<N ; i++) a[i]=b[i]; }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

TABLEAUX ET POINTEURS

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Pointeur
Cest une variable dont la valeur est l'adresse d'une structure de donnes
NULL est une valeur spciale spciale de pointeur qui ne reprsente reprsente aucune adresse

#definie dans <stddef.h>


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Pointeur
Dclaration
int *p;

p un pointeur dentier: de type int * Pas dallocation de lobjet point mais du pointeur

??
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Prof. A. EL FAKER

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Pointeur
Oprateur dadressage
Extraire ladresse dun objet quelconque
x est un objet adressable

& int x; p= &x;

p @
Prof. A. EL FAKER

@
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Pointeur
Oprateur dindirection
Appliqu aux expressions de type pointeur de

int x =5; int *p =&x; *p++; x 6 p


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Calculs de pointeurs
Somme dun pointeur et dun entier

p+1

p+2

p+i: un pointeur de mme type que p

addr(p+i)==addr(p)+i*sizeof(T)
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Calculs de pointeurs
Comparaison de pointeurs de mme type p==q ssi
addr(p) == addr(q)

p
Prof. A. EL FAKER

q
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Calculs de pointeurs
Soustraction de pointeurs de mme type
p - q est lentier i tel que p+i=q

p
Prof. A. EL FAKER

p-q

ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Calculs de pointeurs
Affectation dun pointeur
Par un entier

int x=0; int *p; // OK p = NULL; p = 0; // Mme chose p=x;


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

// //

incorrect bien que x vaut 0

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Tableaux et pointeurs
Un tableau est assimil un pointeur sur le dbut int t[6];

t
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Tableaux et pointeurs
t est un pointeur sur le premier lment

Parcours laide dun pointeur

int t[6]; int *p; for(p=t; p<t+6; p++) *p =0; p t 0 0 0 0 0 0

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Tableaux et pointeurs
t est un pointeur constant int t[6]; // incorrect t++; Gnralement lcriture e[e] est interprte comme *(e+e)
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Exemple
Plus petite valeur dune suite de nombres lus et rangs dans un tableau

Taille du tableau : 6 Elments du tableau : 34 16 25 30 15 27 La plus petite valeur : 15


Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

CHANES DE CARACTRES

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Dfinition
Tableau de caractres termin par \0
char ch[ ] = "tout"; char *pc = &ch; //parasitage

ch
Prof. A. EL FAKER

t t

o o

u u

t t

\0 \0

ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Chane littrale
Un tableau anonyme de caractres de classe statique char *p= "MONTRE"; //correcte "MONTRE"; "MONTRE" est convertit en pointeur vers M qui affecte la valeur de p
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Entres/sorties de chanes
char *gets(char *)
Remplace \n par \0 Suppose que lallocation est dj faite Retourne NULL si erreur

scanf("%s",chaine)
Sarrte au premier ESPACE
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Entres/sorties de chanes

puts(chaine)
est quivalente

printf("%s\n", chaine)

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Traitement des chanes


Pour toutes les fonctions
Prototypes dclars dans: string.h Supposent que les chanes
Sont convenablement alloues Se terminent par \0

Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Traitement des chanes


Longueur dune chane Algorithme int strlen( const char *s){ register char *t =s; while(*t++); return t-s+1; }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Traitement des chanes


Comparaison de chanes int strcmp( const char* s1, const char *s2 ); Utiliser #define identique(s1,s2) \ (! strcmp( (s1), (s2))
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Structures de donnes
Leon n 1 Introduction et vue densemble n. 3 Complment C : Tableaux et chanes

Traitement des chanes


Recopie de chanes main #include<string.h> main( ){ char s1[120], s2[81]; /* initialisation de s1 */ /* recopie s2 dans s1 */ strcpy(s1,s2); }
Prof. A. EL FAKER
ENSIAS - UNIVERSITE MOHAMMED V SOUISSI

Vous aimerez peut-être aussi