Académique Documents
Professionnel Documents
Culture Documents
Souheib Baarir
1
1
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
1 / 27
Introduction
Les pointeurs Dnition des pointeurs Arithmtique des pointeurs Allocation dynamique
Pointeurs et tableaux
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
2 / 27
Introduction
Introduction
Les pointeurs Dnition des pointeurs Arithmtique des pointeurs Allocation dynamique
Pointeurs et tableaux
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
3 / 27
Introduction
Toute variable manipule dans un programme est stocke quelque part en
mmoire centrale.
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
4 / 27
Introduction
Toute variable manipule dans un programme est stocke quelque part en
mmoire centrale.
La mmoire peut tre assimile un tableau dont chaque lment est identi par une `adresse'.
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
4 / 27
Introduction
Toute variable manipule dans un programme est stocke quelque part en
mmoire centrale.
La mmoire peut tre assimile un tableau dont chaque lment est identi par une `adresse'. Pour retrouver une variable, il sut, donc, de connatre l'adresse de l'lment-mmoire ou elle est stocke.
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
4 / 27
Introduction
Toute variable manipule dans un programme est stocke quelque part en
mmoire centrale.
La mmoire peut tre assimile un tableau dont chaque lment est identi par une `adresse'. Pour retrouver une variable, il sut, donc, de connatre l'adresse de l'lment-mmoire ou elle est stocke. C'est le compilateur qui fait le lien entre l'identicateur d'une variable et son adresse en mmoire.
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
4 / 27
Introduction
Toute variable manipule dans un programme est stocke quelque part en
mmoire centrale.
La mmoire peut tre assimile un tableau dont chaque lment est identi par une `adresse'. Pour retrouver une variable, il sut, donc, de connatre l'adresse de l'lment-mmoire ou elle est stocke. C'est le compilateur qui fait le lien entre l'identicateur d'une variable et son adresse en mmoire. Il peut tre cependant plus intressant de dcrire une variable non plus par son identicateur mais directement par son adresse !
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
4 / 27
Dnition
On appelle
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
5 / 27
Dnition
On appelle
Caractrisation
Une Lvalue est caractrise par : son
adresse
valeur
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
5 / 27
Dnition
On appelle
Caractrisation
Une Lvalue est caractrise par : son
adresse
valeur
Lvalue : exemple
int i , j ; i =1; j=i ;
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
6 / 27
Lvalue : exemple
int i , j ; i =1; j=i ;
Si le compilateur a plac la variable i l'adresse 4831830000 et j l'adresse 4831830004, alors :
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
6 / 27
Lvalue : exemple
int i , j ; i =1; j=i ;
Si le compilateur a plac la variable i l'adresse 4831830000 et j l'adresse 4831830004, alors :
Lvalue
Valeur 1 1
i j
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
6 / 27
Lvalue : exemple
int i , j ; i =1; j=i ;
Si le compilateur a plac la variable i l'adresse 4831830000 et j l'adresse 4831830004, alors :
Lvalue
Valeur 1 1
i j
Remarque
L'adresse d'une lvalue est un entier (16 bits, 32 bits ou 64 bits) et ce quelque soit le type de la valeur de lvalue.
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
6 / 27
L'oprateur adresse
Pour acceder l'adresse d'une variable (lvalue) nous disposons de l'oprateur unaire
&.
Par l'exemple :
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
7 / 27
Les pointeurs
Introduction
Les pointeurs Dnition des pointeurs Arithmtique des pointeurs Allocation dynamique
Pointeurs et tableaux
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
8 / 27
Outline
Introduction
Les pointeurs Dnition des pointeurs Arithmtique des pointeurs Allocation dynamique
Pointeurs et tableaux
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
9 / 27
Introduction
Les pointeurs Dnition des pointeurs Arithmtique des pointeurs Allocation dynamique
Pointeurs et tableaux
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
10 / 27
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
11 / 27
Dclaration
type *nomPointeur
(o
type
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
11 / 27
Dclaration
type *nomPointeur
Exemple : (o
type
i n t i =3; i n t p ; p = &i ;
S. Baarir (Paris10/LIP6) Les pointeurs L2 Mia - 2010/2011 11 / 27
Dclaration
type *nomPointeur
Exemple : (o
type
i n t i =3; i n t p ; p = &i ;
S. Baarir (Paris10/LIP6)
Lvalue
Valeur 3 4830000
L2 Mia - 2010/2011 11 / 27
i p
Exemple :
i n t i =3; i n t p ; p = &i ;
Lvalue
Valeur 3 4830000
i p
Solution
Utilisation d'un nouvel oprateur unaire : *
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
12 / 27
Exemple :
Valeur 3 4830000 3
i p *p
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
13 / 27
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
14 / 27
Lvalue
i j p1 p2
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
14 / 27
Lvalue
i j p1 p2
Lvalue
i j p1 p2
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
14 / 27
Outline
Introduction
Les pointeurs Dnition des pointeurs Arithmtique des pointeurs Allocation dynamique
Pointeurs et tableaux
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
15 / 27
Introduction
Les pointeurs Dnition des pointeurs Arithmtique des pointeurs Allocation dynamique
Pointeurs et tableaux
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
16 / 27
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
17 / 27
La valeur d'un pointeur est un entier. On peut appliquer un pointeur quelque oprations arithmtiques : Addition d'un entier un pointeur. Soustraction d'un entier pointeur. Dirence entre deux pointeurs (de mme type).
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
17 / 27
=p+i
(resp. p
= p i)
dsigne un pointeur
sur un element de type type , la valeur de p est gale la valeur de p incrment (resp. dcrment) de i
sizeof
(type ).
=p+i
(resp. p
= p i)
dsigne un pointeur
sur un element de type type , la valeur de p est gale la valeur de p incrment (resp. dcrment) de i
sizeof
(type ).
Lvalue
i p1 p2
L2 Mia - 2010/2011
18 / 27
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
19 / 27
Lvalue
i p1 p2 j
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
19 / 27
Outline
Introduction
Les pointeurs Dnition des pointeurs Arithmtique des pointeurs Allocation dynamique
Pointeurs et tableaux
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
20 / 27
Allocation dynamique
Introduction
Les pointeurs Dnition des pointeurs Arithmtique des pointeurs Allocation dynamique
Pointeurs et tableaux
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
21 / 27
p = NULL ;
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
22 / 27
p = NULL ; p = &i ;
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
22 / 27
p = NULL ; p = &i ;
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
22 / 27
stdlib.h : char* malloc(nombreOctets) Par dfaut, cette fonction retourne un char * pointant vers une espace mmoire de taille nombreOctets. Il faut convertir le de sortie de malloc l'aide d'un cast, pour des pointeur qui ne sont pas des char *
autre) de la fonction de la libraire standard
S. Baarir (Paris10/LIP6) Les pointeurs L2 Mia - 2010/2011 23 / 27
Lvalue
i p
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
24 / 27
Valeur 3 4830008 ?
i p *p
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
24 / 27
Lvalue
Valeur 3 4830008 3
L2 Mia - 2010/2011 24 / 27
i p *p
S. Baarir (Paris10/LIP6)
Tout espace-mmoire allou dynamiquement via quivalent) doit obligatoirement tre dsallou (memory leak).
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
25 / 27
Pointeurs et tableaux
Introduction
Les pointeurs Dnition des pointeurs Arithmtique des pointeurs Allocation dynamique
Pointeurs et tableaux
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
26 / 27
Soit a
alors
tab
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
27 / 27
Soit a
alors
tab
i n t main ( i n t a r v , char a r g [ ] ) { i n t tab [5]={1 ,2 ,3 ,4 ,5}; i n t i , p ; p = tab ; f o r ( i =0 ; i <5 ; ++i ) p r i n t f ( " ( p+i ) = %d = p [ i ] = %d = t a b [ i ] = %d \n" , ( p+i ) , p [ i ] , t a b [ i ] ) ; }
S. Baarir (Paris10/LIP6) Les pointeurs L2 Mia - 2010/2011 27 / 27