Académique Documents
Professionnel Documents
Culture Documents
Pointeurs PDF
Pointeurs PDF
Les pointeurs
1
Souheib Baarir
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
I Toute variable manipule dans un programme est stocke
quelque part en
S. Baarir (Paris10/LIP6)
mmoire centrale.
Les pointeurs
L2 Mia - 2010/2011
4 / 27
Introduction
I 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
I 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
I 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
I 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
Dnition
On appelle
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
5 / 27
Dnition
On appelle
Caractrisation
Une Lvalue est caractrise par :
I son adresse :
i.e.,
I sa valeur :
S. Baarir (Paris10/LIP6)
i.e.,
Les pointeurs
L2 Mia - 2010/2011
5 / 27
Dnition
On appelle
Caractrisation
Une Lvalue est caractrise par :
I son adresse :
i.e.,
I sa valeur :
i.e.,
Les pointeurs
L2 Mia - 2010/2011
5 / 27
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 :
S. Baarir (Paris10/LIP6)
Lvalue
Adresse
Valeur
4831830000
4831830004
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
Adresse
Valeur
4831830000
4831830004
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 :
int i ;
p r i n t f ( " l ' a d r e s s e de i = %l d " ,& i ) ;
Si le compilateur a plac la variable i l'adresse 4831830000 alors
l'achage sera : l'adresse de i = 4831830000
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
Notion de pointeur
Dnition
Un pointeur est une lvalue dont la valeur est gale l'adresse
d'une autre lvalue.
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
11 / 27
Notion de pointeur
Dnition
Un pointeur est une lvalue dont la valeur est gale l'adresse
d'une autre lvalue.
Dclaration
type *nomPointeur
S. Baarir (Paris10/LIP6)
(o
type
Les pointeurs
L2 Mia - 2010/2011
11 / 27
Notion de pointeur
Dnition
Un pointeur est une lvalue dont la valeur est gale l'adresse
d'une autre lvalue.
Dclaration
type *nomPointeur
(o
type
Exemple :
i n t i =3;
i n t p ;
p = &i ;
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
11 / 27
Notion de pointeur
Dnition
Un pointeur est une lvalue dont la valeur est gale l'adresse
d'une autre lvalue.
Dclaration
type *nomPointeur
(o
type
Exemple :
i n t i =3;
i n t p ;
p = &i ;
S. Baarir (Paris10/LIP6)
Lvalue
Adresse
Valeur
4830000
4830004
4830000
Les pointeurs
L2 Mia - 2010/2011
11 / 27
Exemple :
i n t i =3;
i n t p ;
p = &i ;
Lvalue
Adresse
Valeur
4830000
4830004
4830000
Solution
Utilisation d'un nouvel oprateur unaire : *
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
12 / 27
Exemple :
i n t i =3;
i n t p ;
p = &i ;
p r i n t f ( " La v a l e u r de p = %d" , p ) ;
S. Baarir (Paris10/LIP6)
Lvalue
Adresse
Valeur
4830000
4830004
4830000
*p
4830000
Les pointeurs
L2 Mia - 2010/2011
13 / 27
S. Baarir (Paris10/LIP6)
Les pointeurs
int
main ( i n t a r v , char a r g [ ] )
{
i n t i =3, j =6;
i n t p1 , p2 ;
p1 = & i ;
p2 = &j ;
p1=p2 ;
}
L2 Mia - 2010/2011
14 / 27
Lvalue
i
j
p1
p2
Adresse
4830000
4830004
4835984
4835982
S. Baarir (Paris10/LIP6)
int
main ( i n t a r v , char a r g [ ] )
{
i n t i =3, j =6;
i n t p1 , p2 ;
p1 = & i ;
p2 = &j ;
p1=p2 ;
}
Valeur
3
6
4830000
4830004
Les pointeurs
L2 Mia - 2010/2011
14 / 27
Lvalue
i
j
p1
p2
Adresse
4830000
4830004
4835984
4835982
S. Baarir (Paris10/LIP6)
Valeur
3
6
4830000
4830004
Les pointeurs
int
main ( i n t a r v , char a r g [ ] )
{
i n t i =3, j =6;
i n t p1 , p2 ;
p1 = & i ;
p2 = &j ;
p1=p2 ;
}
Lvalue
i
j
p1
p2
Adresse
4830000
4830004
4835984
4835982
Valeur
6
6
4830000
4830004
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
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
17 / 27
I l'expression
=p+i
(resp. p
= p i)
dsigne un pointeur
I la valeur de
dcrment) de i
sizeof
incrment (resp.
(type ).
int
main ( i n t a r v , char a r g [ ] ) {
i n t i =5;
i n t p1 , p2 ;
p1 = & i + 2 ;
p2 = p1 2 ;
}
S i & i = 4830000 a l o r s :
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
18 / 27
I l'expression
=p+i
(resp. p
= p i)
dsigne un pointeur
I la valeur de
dcrment) de i
sizeof
incrment (resp.
(type ).
int
main ( i n t a r v , char a r g [ ] ) {
i n t i =5;
i n t p1 , p2 ;
p1 = & i + 2 ;
p2 = p1 2 ;
}
Lvalue
Adresse
Valeur
4830000
p1
4830004
4830008
p2
4830008
4830000
S i & i = 4830000 a l o r s :
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
18 / 27
q dsigne
(p q )/sizeof (type ),
I l'expression
int
main ( i n t a r v , char a r g [ ] ) {
i n t i =5;
i n t p1 , p2 ;
p1 = & i + 2 ;
p2 = p1 2 ;
i n t j = p2 p1 ;
}
S i & i = 4830000 a l o r s :
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
19 / 27
q dsigne
(p q )/sizeof (type ),
I l'expression
int
main ( i n t a r v , char a r g [ ] ) {
i n t i =5;
i n t p1 , p2 ;
p1 = & i + 2 ;
p2 = p1 2 ;
i n t j = p2 p1 ;
}
Lvalue
Adresse
Valeur
4830000
p1
4830004
4830008
p2
4830008
4830000
4830016
S i & i = 4830000 a l o r s :
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 ;
pointeur :
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
22 / 27
p = NULL ;
pointeur :
S. Baarir (Paris10/LIP6)
p = &i ;
Les pointeurs
L2 Mia - 2010/2011
22 / 27
p = NULL ;
pointeur :
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
Adresse
Valeur
4830000
4830004
S. Baarir (Paris10/LIP6)
Les pointeurs
L2 Mia - 2010/2011
24 / 27
S. Baarir (Paris10/LIP6)
Lvalue
Adresse
Valeur
4830000
4830004
4830008
*p
4830008
Les pointeurs
L2 Mia - 2010/2011
24 / 27
S. Baarir (Paris10/LIP6)
Lvalue
Adresse
Valeur
4830000
4830004
4830008
*p
4830008
Les pointeurs
L2 Mia - 2010/2011
24 / 27
stdlib.h :
void free(nomPointeur)
malloc (ou
par free, sinon
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
S. Baarir (Paris10/LIP6)
alors
tab
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