Vous êtes sur la page 1sur 12

Partie 3

LES POINTEURS ET LES


TABLEAUX

Prof Asmaa El Hannani 2AP-S3 118

Les pointeurs et les tableaux

1. Les pointeurs
2. Les tableaux
 Les chaînes de caractères
 Les tableaux à plusieurs indices

Prof Asmaa El Hannani 2AP-S3 119

1
Les pointeurs

Les pointeurs : définition

 Un pointeur est une variable qui contient l'adresse


d'une autre variable :
 d’une donnée,
 d’une fonction (fera l'objet du prochain cours).

Prof Asmaa El Hannani 2AP-S3 121

2
Déclaration d’un pointeur sur donnée

 La déclaration :
Type_donnee *Ident_ptr;

 Exemple :
int *pAdi;

/* pAdi est codé sur 4 octets (adressage 32


bits) et contiendra l'adresse d'un entier */

Prof Asmaa El Hannani 2AP-S3 122

Les opérateurs * et &

int i;
int *pAdi;

 &  pour accéder à l'adresse d'une donnée


 &i  le numéro de la case mémoire correspondant à la
variable i
 pAdi = &i;  pAdi correspondra aussi à l’adresse de i

 *  pour accéder au contenu d'une adresse


 *pAdi  permet d'accéder au contenu de l'adresse pAdi
 contenu de &i (adresse de i)  i

Prof Asmaa El Hannani 2AP-S3 123

3
L’adressage indirect

int i,*pAdi; i Adresse de i 10


contenant contenu
i = 10;

pAdi = &i; pAdi Adresse de pAdi Adresse de i


contenant contenu

Prof Asmaa El Hannani 2AP-S3 124

L’adressage indirect

int i,*pAdi; i Adresse de i 12


contenant contenu
i = 10;

pAdi = &i; pAdi Adresse de pAdi Adresse de i

*pAdi = 12; contenant contenu

Prof Asmaa El Hannani 2AP-S3 125

4
Arithmétique des pointeurs sur données

 Additions et soustractions d'entiers sur les adresses


contenues dans les pointeurs.

 Elles les déplacent de la quantité, qui a été


additionnée ou soustraite, multipliée par la taille en
octet du type de l'objet pointé.

Prof Asmaa El Hannani 2AP-S3 126

Exemple

double *pAd; 60 i = 80
int i = 80; 64 xx = 3.1415
double xx=3.1415; 100 pAd = ?

…… 60 i = 80
64 xx = 3.1415
pAd = &xx; 100 pAd = 64

pAd = pAd + i; 60 i = 80
64 xx = 3.1415
/* pAd +i*sizeof(double)
pAd + 80*8 octets */ 100 pAd = 704
Prof Asmaa El Hannani 2AP-S3 127

5
Exercice
 Expliquez les valeurs qui vont être afficher.
#include <stdio.h>
int main() {
int var =10;
int *p;
p= &var;
printf ( "%p \n", &var);
printf ( "%p \n", p);
printf ( "%d \n", var);
printf ( "%d \n", *p);
printf ( "%d \n", *(&var));
Printf ( "%p \n", p);
printf ( "%p ", &p);
return 0;
}
Prof Asmaa El Hannani 2AP-S3 128

Les Tableaux

6
Définition et Déclaration

 Un tableau est un ensemble d’éléments de même type désignés


par un identificateur unique ;
 chaque élément est repéré par un indice précisant sa position au sein de
l’ensemble.

 Déclaration:
Type_donnee Ident_Tab [NbElem];
 int, double, char …
 Ident_Tab : le nom du tableau, c'est le pointeur sur le tableau, c'est la
variable qui contient l'adresse du 1er élément du tableau
 NbElem : le nombre d’éléments du tableau

 Exemple: int tab[20];


Prof Asmaa El Hannani 2AP-S3 130

Quelques règles
 Chaque élément est repéré par sa position dans le tableau, nommée
indice et qui est placé entre [ ]. Le 1er élément du tableau déclaré
par int tab[20]; sera désigné par tab[0], le 2ème pat tab[1], ….
 Un indice peut prendre la forme de n’importe quelle expression
arithmétique de type entier.
 La dimension d’un tableau ne peut être qu’une constante ou une
expression constante. #define N 50
Ainsi, cette construction: … est correcte.
int t[N] ;
float h[2*N-1] ;
En revanche, elle ne le serait pas (en C) si N était une constante
symbolique définie par const int N=50, les expressions N et 2*N-1
n’étant alors plus calculables par le compilateur!
Prof Asmaa El Hannani 2AP-S3 131

7
L'initialisation explicite d'un tableau

 Un tableau peut être initialisé lors de sa déclaration :


int MyTab [5] = {1,4,8,7,6};
/* place les valeurs 1,4,8,7 et 6 dans
chacun des cinq éléments du tableau */

 La taille du tableau n'est pas obligatoire si le tableau est


initialisé à sa création.
int tableau[] = {10,20,30,40,50};

 Il est possible de ne mentionner dans les accolades que les


premières valeurs
int tab[5] = { 10, 20 } ;
int tab[5] = { 10, 20, 5 } ;

Prof Asmaa El Hannani 2AP-S3 132

Tableaux à un seul indice et Pointeur

 L’identificateur d’un tableau, lorsqu’il est employé seul (sans


indices à sa suite), est considéré comme un pointeur (constant)
sur le début du tableau

Prof Asmaa El Hannani 2AP-S3 133

8
Exemple

 Supposons, par exemple, que l’on effectue la déclaration


suivante :
int t[10];

 Les notations suivantes sont équivalentes:

t &t[0]
t+1 &t[1]
t+i &t[i]
t[i] *(t+i)

Prof Asmaa El Hannani 2AP-S3 134

Chaînes de caractères :
Tableau 1D de caractères
 Déclaration et initialisation :
char chaine[10];
char source[]="Ma premiere chaine de char";
char lettre[]={'t','a','r','a','t','a','t','a',0};

 Format:
printf("\nLe contenu de source est %s",source);

scanf("%s",chaine);
\\ou
gets(chaine);

Prof Asmaa El Hannani 2AP-S3 135

9
Exemple

 Imprimer une chaine de caractère à l’envers:

char *pfin;
char cBonjour [] = "Bonjour";
pfin = cBonjour + strlen(cBonjour);

do{
printf ("%c",*--pfin);
}while (cBonjour != pfin );

Prof Asmaa El Hannani 2AP-S3 136

Pour comprendre

 strlen(cBonjour) renvoie 7
 strlen est une fonction prédéfinie en C, qui donne le
nombre de caractères de la chaine donnée en paramètre.
 pfin = cBonjour + 7

Prof Asmaa El Hannani 2AP-S3 137

10
Tableau de Tableaux

 Déclaration:
Type_donne Indent_Tab_Tab[Nlign][Ncol];
 Nlign et Ncol sont des constantes entières

 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]);

Prof Asmaa El Hannani 2AP-S3 138

Tableau à 2 indices et Pointeurs

 Tab[i] est un pointeur constant sur un tableau de nCol


éléments.

 Tab est un pointeur constant sur un tableau d’adresses de


tableaux de nCol éléments

Prof Asmaa El Hannani 2AP-S3 139

11
Exemple
int t[3][4];

 Voici un schéma récapitulant les notations du slide précédent:

Prof Asmaa El Hannani 2AP-S3 140

Exercice:

 Ecrivez un programme qui remplie puis affiche un tableau


avec des chiffres de 0 à 9 en utilisant une boucle:
a) en utilisant le "formalisme tableau"
b) en utilisant le "formalisme pointeur"

 Ecrivez un programme qui lit 10 nombres entiers dans un


tableau (depuis la console) puis calcule et affiche la moyenne.

Prof Asmaa El Hannani 2AP-S3 141

12

Vous aimerez peut-être aussi