0% ont trouvé ce document utile (0 vote)
195 vues20 pages

Pointeurs et Tableaux en C

Transféré par

Bacem Chaabane
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
195 vues20 pages

Pointeurs et Tableaux en C

Transféré par

Bacem Chaabane
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Dpartement Gnie Civil Dpartement Mcanique nergtique

Les pointeurs et les tableaux


1) Les pointeurs 2) Les tableaux Les chanes de caractres Les tableaux plusieurs indices 3) Les pointeurs sur fonctions

maj de http://iusti.polytech.univ-mrs.fr/~bergougnoux/enseignement.htm
Prog. struct. : C
III-Les pointeurs et les tableaux

Les pointeurs : dfinition


Un pointeur est une variable qui contient l'adresse d'une autre variable : dune donne, dune fonction (fera l'objet du prochain cours).

Prog. struct. : C

III-Les pointeurs ...

Les pointeurs sur donne

Dclaration dun pointeur sur donne Mcanisme de l'adressage indirect Arithmtique des pointeurs

Prog. struct. : C

III-Les pointeurs ...

Dclaration dun pointeur sur donne


La dclaration : Type_donnee *Ident_ptr; Exemple : int *pAdi; // pAdi est cod sur 4 octets (adressage 32 bits) et contiendra l'adresse d'un entier

Prog. struct. : C

III-Les pointeurs ...

Ladressage indirect
Adresse de i contenant

int i,*pAdi; i=10; pAdi = &i; *pAdi = 12;

10 contenu

pAdi

Adresse de i Adresse de pAdi contenu contenant


5

Prog. struct. : C

III-Les pointeurs ...

Ladressage indirect
12 contenu Adresse de i contenant

int i,*pAdi; i=10; pAdi = &i; *pAdi = 12;

pAdi

Adresse de i Adresse de pAdi contenu contenant


6

Prog. struct. : C

III-Les pointeurs ...

& et *
int i; int *padi;

& pour accder l'adresse d'une donne


ex : &i le numro de la case mmoire correspondant la variable i padi = &i; * pour accder au contenu d'une adresse ex : *padi permet d'accder au contenu de l'adresse padi contenu de l'adresse de i i
Prog. struct. : C
III-Les pointeurs ...

Arithmtique des pointeurs sur donnes


Additions et soustractions d'entiers sur les adresses contenues dans les pointeurs Elles les dplacent de la quantit, qui a t additionne ou soustraite, multiplie par la taille en octet du type de l'objet point.

Prog. struct. : C

III-Les pointeurs ...

Exemple
double *pAd; int i = 80; double xx=3.1415; pAd = &xx; pAd = pAd+i; /*pAd +i*sizeof(double) pAd + 80*8 octets*/
Prog. struct. : C
III-Les pointeurs ...

60 64

i = 80 xx = 3.1415

100 pAd = ? 60 64 i = 80 xx = 3.1415

100 pAd = 64 60 64 i = 80 xx = 3.1415

100 pAd = 704


9

Les Tableaux

1. Les tableaux mono-dimensionnels 2. Les chanes de caractres 3. Les tableaux de tableaux

Prog. struct. : C

III- ... Les tableaux

10

Les Tableaux : dclaration et dfinition


Type_donnee Ident_Tab [NbElem]; int, double, char NbElem : le nombre dlments du tableau Cest une constante littrale ou symbolique (#define) Ident_Tab : le nom du tableau, c'est le pointeur sur le tableau, c'est la variable qui contient l'adresse du 1er lment du tableau
Prog. struct. : C
III- ... Les tableaux

11

Exemples
double Toto [100];
//Toto est un tableau de 100 doubles

int MyTab [5] = {1,4,8,7,6};


//MyTab est un tableau de 5 entiers initialis : //MyTab [0]= 1, , MyTab [4]= 6

#define NBELEM 512 float SonTab [NBELEM];


//SonTab est un tableau de NBELEM float

Prog. struct. : C

III- ... Les tableaux

12

Tableaux un seul indice et Pointeur


Type_donnee Tab[N];
Tab[0] Tab[1] Tab[2] Tab[N-1]

Tab+i

pointeur
*(Tab+i)

&Tab[i] Tab [i]

tableau

printf("%d",*MyTab); ou printf("%d",MyTab[0]); scanf("%d",MyTab+2); ou scanf("%d",&MyTab[2]);


Prog. struct. : C
III- ... Les tableaux

13

Chanes de caractres : Tableau 1D de caractres


Dclaration et initialisation : char chaine[10]; char source[]="Ma premiere chaine de char"; Format : printf("\nLe contenu de source est %s",source); scanf("%s",chaine); ou gets(chaine);

char lettre[]={'t','a','r','a','t','a','t','a',0};

Prog. struct. : C

III- ... Les tableaux

14

Chanes de caractres
char *pfin; char cBonjour [] = "Bonjour"; pfin = cBonjour+strlen(cBonjour); do { printf ("%c",*--pfin); }while (pfin != cBonjour);

Prog. struct. : C

III- ... Les tableaux

15

Pour comprendre
'B' 'o' 'n' 'j' 'o' 'u' 'r' 0

cBonjour strlen(cBonjour) renvoie 7 Adresse pointe par

pfin

Adresse pointe par

pfin = cBonjour + 7

Prog. struct. : C

III- ... Les tableaux

16

Chane de Caractres Exemple

!OG

Prog. struct. : C

III- ... Les tableaux

17

Tableau de Tableaux
Dclaration : Type_donne Indent_Tab_Tab[Nlign][Ncol]; Nlign et Ncol sont des constantes entires littrales ou symbolique. Exemple : float mat[3][3]; int trice[3][3]={{1,1,1}, {1,1,1}, {1,1,1}};
printf("%d %d %d", trice[0][0],trice[1][1],trice[2][2]); scanf("%f",&mat[0][0]); ou scanf("%f",mat[0]);

Prog. Struct. - C

III - ... Les tableaux

18

Tableau deux indices


Ligne0 Ligne1 ...

NCol

NCol

NCol

NLign x NCol

Prog. Struct. - C

III - ... Les tableaux

19

Tableau 2 indices et Pointeurs


Tab[i] &Tab[i][0] Tab[i] est un pointeur constant sur un tableau de nCol lments Tab est un pointeur constant sur un tableau dadresses de tableaux de nCol lments Tab[i][j] *(*(Tab+i)+j) int **pptab; //pptab => pointeur de pointeur int tableau[4][4]; // contiendra l'adresse d'une pptab = tableau; // adresse d'entier
Prog. Struct. - C
III - ... Les tableaux

20

Vous aimerez peut-être aussi