0% ont trouvé ce document utile (0 vote)
157 vues36 pages

Seance5 Pointeurs PDF

Transféré par

Chrif ÀyOùb
Copyright
© © All Rights Reserved
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)
157 vues36 pages

Seance5 Pointeurs PDF

Transféré par

Chrif ÀyOùb
Copyright
© © All Rights Reserved
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

Les pointeurs en C

Séance 5

de l'UE « introduction à la programmation »

Bruno Bouzy

[Link]@[Link]
Pointeurs
• Définition, utilisation de base

• Utilisation avec les fonctions

• Utilisation avec les tableaux

• Utilisation avec les structures

pointeurs 2
Déclaration

• Déclaration d'un pointeur sur int

int * p;

pointeurs 3
Initialisation

• Convention d'initialisation avec NULL

p = NULL;

pointeurs 4
Affectation

• Affectation avec une adresse de variable

int a;
...
p = &a;

pointeurs 5
Déréférencement

• Déréférencement d'un pointeur

int b;
b = *p;

pointeurs 6
Exemple basique (1/5)

int * p;

p
?
int *

pointeurs 7
Exemple basique (2/5)

int * p;
int a=4;

p
? a 4
int * int

pointeurs 8
Exemple basique (3/5)

int * p;
int a=4;
p = &a;
p
a 4
int * int

• p « pointe » sur a
• &a : adresse de a
pointeurs 9
Exemple basique (4/5)

int * p;
int a=4;
p = &a;
int b; p b
a 4 ?
int * int int

pointeurs 10
Exemple basique (5/6)

int * p;
int a=4;
p = &a;
int b; p
a b 4
4
b = *p; int * int int

• *p : contenu de la variable « pointée » par p


• *p : « déréférencement » de p
pointeurs 11
Exemple basique (6/6)
int a=4; int * p = &a;
int b; b = *p;
p
a 4 b 4
int * int int

• p « pointe » sur a
• &a adresse de a
• *p contenu de la variable pointée par p
ou « déréférencement » de p
pointeurs 12
Type d'un pointeur

float a=4.0; int * p = &a;

• Erreur de compilation: un pointeur est un pointeur


sur des variables d'un type donné.

float a=4.0; float * p = &a;

• Une variable de type truc * pointe sur un truc


pointeurs 13
Les erreurs

• Un pointeur non initialisé sur une adresse de


variable ne peut etre déréférencé.

int * p; int b; b = *p;


• Erreur d'exécution.

int * p = NULL; int b; b = *p;


• Erreur d'exécution.
pointeurs 14
Utilisation de NULL (1/3)
• Pourquoi initialiser un pointeur avec NULL ?
• 3 cas: le pointeur pointe sur
– la variable adéquate et on peut s'en servir
– une variable inadéquate et le programme est
incorrect
– NULL
• Convention:
– On affecte NULL quand un pointeur ne sert plus
ou pas encore

pointeurs 15
Utilisation de NULL (2/3)
• Avec cette convention, 2 cas:
– Pointeur sur variable adéquate
– Pointeur NULL

• Avant d'utiliser un pointeur on teste sa valeur:

if (p!=NULL) { ... b = *p; ...}


else { ... }
pointeurs 16
Utilisation de NULL (3/3)
• Avec cette convention le pointeur est mis à NULL

– Après utilisation:
p = &a; ... b = *p; ... p = NULL;

– A la déclaration (si non simultanée de l'affectation):


int * p = NULL; ... p = &a;

pointeurs 17
Exemple 1
• printf("a = %d, b = %d, *p = %d.\n", a,
b, *p); après chaque ligne.

• sortie du programme ?
int a = 1; int * p = &a; int b = *p;
a = 2;
b = 3;
p = &b;
a = 4;
b = 5;

pointeurs 18
Exemple 1
int a = 1; int * p = &a; int b = *p;

p
a 1 b 1
int * int int

a = 1, b = 1, *p = 1.
pointeurs 19
Exemple 1
int a = 1; int * p = &a; int b = *p;
a = 2;

p
a 2 b 1
int * int int

a = 2, b = 1, *p = 2.
pointeurs 20
Exemple 1
int a = 1; int * p = &a; int b = *p;
a = 2;
b = 3;

p
a 2 b 3
int * int int

a = 2, b = 3, *p = 2.
pointeurs 21
Exemple 1
int a = 1; int * p = &a; int b = *p;
a = 2;
b = 3;
p = &b;

p
a 2 b 3
int * int int

a = 2, b = 3, *p = 3.
pointeurs 22
Exemple 1
int a = 1; int * p = &a; int b = *p;
a = 2;
b = 3;
p = &b;
a = 4;
p
a 4 b 3
int * int int

a = 4, b = 3, *p = 3.
pointeurs 23
Exemple 1
int a = 1; int * p = &a; int b = *p;
a = 2;
b = 3;
p = &b;
a = 4;
b = 5; p
a 4 b 5
int * int int

a = 4, b = 5, *p = 5.
pointeurs 24
Exemple 1
• sortie:
a = 1, b = 1, *p = 1.
a = 2, b = 1, *p = 2.
a = 2, b = 3, *p = 2.
a = 2, b = 3, *p = 3.
a = 4, b = 3, *p = 3.
a = 4, b = 5, *p = 5.

• 2 changements d'un coup si on modifie le


contenu d'une variable pointée.

pointeurs 25
Exemple 2
printf("a = %d, b = %d, *p = %d, *q =
%d.\n", a, b, *p, *q); après chaque ligne
(sauf ligne 1 et 2).
• sortie du programme ?

int a = 1; int b = 2;
int * p = &a;
int * q = p;
a = 3;
b = *q + 10;

pointeurs 26
Exemple 2
int a = 1; int b = 2;

a 1 b 2
int int

a = 1, b = 2.
pointeurs 27
Exemple 2
int a = 1; int b = 2;
int * p = &a;

a 1 b 2
int int

p
int *

a = 1, b = 2, *p = 1
pointeurs 28
Exemple 2
int a = 1; int b = 2;
int * p = &a;
int * q = p;

a 1 b 2
int int

p q
int * int *

a = 1, b = 2, *p = 1, *q = 1.
pointeurs 29
Exemple 2
int a = 1; int b = 2;
int * p = &a;
int * q = p;
a = 3;
a 3 b 2
int int

p q
int * int *

a = 3, b = 2, *p = 3, *q = 3.
pointeurs 30
Exemple 2
int a = 1; int b = 2;
int * p = &a;
int * q = p;
a = 3;
b = *q + 10;
a 3 b 13
int int

p q
int * int *

a = 3, b = 13, *p = 3, *q = 3.
pointeurs 31
Exemple 2

a = 1, b = 2, *p = 1, *q = 1.
a = 3, b = 2, *p = 3, *q = 3.
a = 3, b = 13, *p = 3, *q = 3.

• 3 changements en une instruction.

pointeurs 32
Exemple 3
• Sortie ?

int a = 1; int b = 2;
int * p = &a; int * q = &b;
printf("a = %d, b = %d.\n", a, b);
printf("*p = %d, *q = %d.\n", *p, *q);
printf("&a = %p, &b = %p.\n", &a, &b);
printf(" p = %p, q = %p.\n", p, q);

pointeurs 33
Exemple 3
int a = 1; int b = 2;
int * p = &a; int * q = &b;

a 1 b 2
int int

p q
int * int *

pointeurs 34
Exemple 3

a = 1, b = 2.
*p = 1, *q = 2.
&a = 0xbffcfab4, &b = 0xbffcfab0.
p = 0xbffcfab4, q = 0xbffcfab0.

• Ici, les adresses de a et b se suivent.


– &b = &a – 4 (en octets)
– (non garanti)
• %p est le format d'entrée sortie d'un pointeur.
pointeurs 35
Résumé de la séance 5
• Pointeurs, utilisation:
– basique
– (avec des fonctions
– avec des tableaux
– avec des structures)

• Exemples

pointeurs 36

Vous aimerez peut-être aussi