Vous êtes sur la page 1sur 85

Langage de programmation C

5. Pointeurs
Sommaire

I. Pointeurs

II. Pointeurs et tableaux

III. Pointeurs et chaînes de caractères

IV. Tableaux de pointeurs

2 Langage de programmation C ESI 2021-2022


Pointeurs
Définition
 Un pointeur est une variable particulière qui
contient, sous forme d’une adresse mémoire, un
mode d’accès au contenu de la variable sur laquelle il
pointe

 La variable en question peut ne pas avoir d’identificateur


(Elle sera uniquement accessible à travers son pointeur)

4 Langage de programmation C ESI 2021-2022


Définition
 Un pointeur est une variable particulière qui contient,
sous forme d’une adresse mémoire, un mode d’accès au
contenu de la variable sur laquelle il pointe

 Un pointeur peut être défini à partir de n’importe quel type de


données (int, float, char…)

 Une fois défini sur un type, il ne peut contenir l’adresse d’une variable
d’un autre type

5 Langage de programmation C ESI 2021-2022


Définition
 Un pointeur est une variable particulière qui
contient, sous forme d’une adresse mémoire, un
mode d’accès au contenu de la variable sur laquelle il
pointe

 Un pointeur sur la variable a contient l’adresse mémoire


de la variable a

 On dit que le pointeur pointe sur a

6 Langage de programmation C ESI 2021-2022


Définition
 Un pointeur est une variable particulière qui
contient, sous forme d’une adresse mémoire, un
mode d’accès au contenu de la variable sur laquelle il
pointe

 Un pointeur sur la variable a contient l’adresse mémoire


de la variable a

 Il est de même type que la variable a

7 Langage de programmation C ESI 2021-2022


Définition
 Un pointeur est une variable particulière qui
contient, sous forme d’une adresse mémoire, un
mode d’accès au contenu de la variable sur laquelle il
pointe

Pointeur sur Variable de type X


variable de type X

8 Langage de programmation C ESI 2021-2022


Définition
 Un pointeur est une variable particulière qui
contient, sous forme d’une adresse mémoire, un
mode d’accès au contenu de la variable sur laquelle il
pointe

Pointeur sur a Variable a

9 Langage de programmation C ESI 2021-2022


Définition
 Les pointeurs jouent un rôle primordiale dans la
programmation

 Passage par adresse : seul moyen de changer le contenu


des variables déclarées comme arguments de fonctions

 Passage de tableau et de chaînes de caractères

 Traitement des tableaux et des chaînes de caractères dans


les fonctions

10 Langage de programmation C ESI 2021-2022


Déclaration
 Syntaxe

type_de_la_variable_pointée *nomPointeur ;

 Exemples

11 Langage de programmation C ESI 2021-2022


Déclaration
 Syntaxe

type_de_la_variable_pointée *nomPointeur ;

 Un pointeur a le même rôle que le nom d’une variable,


qui est de donner accès à un emplacement dans la
mémoire

 Accès au contenu d’une variable par son nom : Adressage direct

 Accès au contenu d’une variable par le pointeur qui contient son


adresse : Adressage indirect
12 Langage de programmation C ESI 2021-2022
Déclaration
 Syntaxe

type_de_la_variable_pointée *nomPointeur ;

 Un pointeur est différent d’une variable

 Un pointeur est une variable qui peut pointer sur différentes


adresses

 Le nom d'une variable reste toujours lié à la même adresse (seule


la valeur stockée dans l’espace mémoire change)

13 Langage de programmation C ESI 2021-2022


Taille des pointeurs
 Un pointeur occupe toujours le même espace dans la
mémoire quel que soit son type

 Cet espace est la plus grande taille gérable par le


processeur (x32 : 4 octets, x64 : 8 octets)

14 Langage de programmation C ESI 2021-2022


Taille des pointeurs
 Un pointeur occupe toujours le même espace dans la
mémoire quel que soit son type

 Cet espace est la plus grande taille gérable par le


processeur (x32 : 4 octets, x64 : 8 octets)

15 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Opérateur &

 Permet d’obtenir l’adresse d’une variable

16 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Opérateur &

 Permet d’obtenir l’adresse d’une variable

17 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
ad1

18 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
ad1 ad2

p a

19 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
ad1 ad2

10

p a

20 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
ad1 ad2

ad2 10

p a

21 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
ad1 ad2

ad2 10

p a

22 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Opérateur &

 Permet d’obtenir l’adresse d’une variable

 Un pointeur étant lui-même une variable, il est possible


d’obtenir l’adresse d’un pointeur

23 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Opérateur &

24 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Opérateur *

 Permet d’accéder au contenu de l’adresse référencée


par le pointeur

 Si un pointeur p pointe sur la variable a, alors *p peut-être


utilisé à la place de a

25 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Opérateur *

 Permet d’accéder au contenu de l’adresse référencée


par le pointeur

26 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Opérateur *

 Permet d’accéder au contenu de l’adresse référencée


par le pointeur

27 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs

28 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs

29 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Opérateurs ++ et – –

 Permettent d’incrémenter et décrémenter l’adresse


référencée par le pointeur de la taille de la variable
pointée

30 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Opérateurs ++ et – –

31 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Opérateurs ++ et – –

 Permettent d’incrémenter et décrémenter l’adresse


référencée par le pointeur de la taille de la variable
pointée

32 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Autres Opérateurs

 Les opérateurs <, >, <=, >=, == et != permettent de


réaliser des comparaisons entre deux pointeurs

 Si les deux pointeurs pointent sur deux éléments d’un tableau,


la comparaison entre les deux revient à comparer entre les
indices correspondants

 L’opérateur – donne le nombre d’éléments entre deux


pointeurs qui pointent sur un même tableau
33 Langage de programmation C ESI 2021-2022
Opérations sur pointeurs
 Exercice

 Soit le programme suivant:


1. Donner les valeurs des
différentes variables après
l’exécution du programme
suivant :
2. Vérifier sur votre IDE

34 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Exercice

 Soit le programme suivant:


1. Donner les valeurs des
différentes variables après
l’exécution du programme
suivant :
2. Vérifier sur votre IDE

35 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Priorité des opérateurs

 Dans une expression, les opérateurs * , & , ++ et – – ont


la même priorité que l’opérateur unaire !

 Ils sont évalués de la droite vers la gauche

 Les opérateurs arithmétiques sont les moins prioritaires

36 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Priorité des opérateurs

37 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Priorité des opérateurs

a = 10

38 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Priorité des opérateurs

*p = 10

39 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Priorité des opérateurs

b = 15 et a = 10

40 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Priorité des opérateurs

a = 15

41 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Priorité des opérateurs

a = 20

42 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Priorité des opérateurs

a = 21

43 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Priorité des opérateurs

a = 22

44 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Priorité des opérateurs

45 Langage de programmation C ESI 2021-2022


Opérations sur pointeurs
 Priorité des opérateurs

46 Langage de programmation C ESI 2021-2022


Pointeurs et tableaux
Pointeurs et tableaux
 Il existe une relation très étroite entre les tableaux et
les pointeurs dans le langage C

 Le nom d'un tableau représente l'adresse de son premier


élément

 Le nom d’un tableau est un pointeur sur son


premier élément (un pointeur dont la valeur ne change
pas)

48 Langage de programmation C ESI 2021-2022


Pointeurs et tableaux
 Il existe une relation très étroite entre les tableaux et
les pointeurs dans le langage C

49 Langage de programmation C ESI 2021-2022


Pointeurs et tableaux
 Il existe une relation très étroite entre les tableaux et
les pointeurs dans le langage C

50 Langage de programmation C ESI 2021-2022


Pointeurs et tableaux
 Il existe une relation très étroite entre les tableaux et
les pointeurs dans le langage C

51 Langage de programmation C ESI 2021-2022


Pointeurs et tableaux
 Il existe une relation très étroite entre les tableaux et
les pointeurs dans le langage C

52 Langage de programmation C ESI 2021-2022


Pointeurs et tableaux
 Il existe une relation très étroite entre les tableaux et
les pointeurs dans le langage C

53 Langage de programmation C ESI 2021-2022


Pointeurs et tableaux
 Il existe une relation très étroite entre les tableaux et
les pointeurs dans le langage C

 tableau[i] est équivalent à *(tableau + i)

54 Langage de programmation C ESI 2021-2022


Pointeurs et tableaux
 Il existe une relation très étroite entre les tableaux et
les pointeurs dans le langage C

 tableau[i] est équivalent à *(tableau + i)

55 Langage de programmation C ESI 2021-2022


Pointeurs et tableaux
 Il existe une relation très étroite entre les tableaux et
les pointeurs dans le langage C

 tableau[i] est équivalent à *(tableau + i)

56 Langage de programmation C ESI 2021-2022


Pointeurs et chaînes de
caractères
Déclaration de chaînes de caractères
 Une chaîne de caractères peut être déclarée comme
pointeur sur char

 Syntaxe

char *chaine ;

58 Langage de programmation C ESI 2021-2022


Déclaration de chaînes de caractères
 Une chaîne de caractères peut être déclarée comme
pointeur sur char

 Syntaxe

char *chaine ;

59 Langage de programmation C ESI 2021-2022


Déclaration de chaînes de caractères
 Une chaîne de caractères peut être déclarée comme
pointeur sur char

 Syntaxe

char *chaine ;

60 Langage de programmation C ESI 2021-2022


Déclaration de chaînes de caractères

ad1

chaine

61 Langage de programmation C ESI 2021-2022


Déclaration de chaînes de caractères

ad1 ad2

ad2 'c' 'e' 'c' 'i' '' … 's' '\0 '

chaine

62 Langage de programmation C ESI 2021-2022


Déclaration de chaînes de caractères

ad1 ad2

ad2 'H' 'e' 'l' 'l' 'o' '' '!' '\0 '

chaine

63 Langage de programmation C ESI 2021-2022


Déclaration de chaînes de caractères

ad1 ad2

ad2 'H' 'e' 'l' 'l' 'o' '' '!' '\0 '

chaine

64 Langage de programmation C ESI 2021-2022


Modification
 Une chaîne de caractères déclarée comme pointeur
sur char est constante

 Elle ne peut pas être modifiée mais peut être lue, copiée
ou affichée

 Le pointeur sur la chaîne de caractères peut être modifié


pour pointer sur un autre objet

65 Langage de programmation C ESI 2021-2022


Modification
 Une chaîne de caractères déclarée comme pointeur
sur char est constante

 Une chaîne de caractères déclarée comme tableau de


char n’est pas constante

 Elle peut être modifiée (élément par élément)

 Le tableau gardera toujours la même adresse

66 Langage de programmation C ESI 2021-2022


Modification
 Une chaîne de caractères déclarée comme pointeur
sur char est constante

 Une chaîne de caractères déclarée comme tableau de


char n’est pas constante
ad1 ad2

ad2 'c' 'e' 'c' 'i' '' … 's' '\0 '

chaine
ad4
'c' 'e' 'c' 'i' '' … 's' '\0 '

tableauChaine
67 Langage de programmation C ESI 2021-2022
Modification
 Une chaîne de caractères déclarée comme pointeur
sur char est constante

 Une chaîne de caractères déclarée comme tableau de


char n’est pas constante

68 Langage de programmation C ESI 2021-2022


Modification
 Une chaîne de caractères déclarée comme pointeur
sur char est constante

 Une chaîne de caractères déclarée comme tableau de


char n’est pas constante

69 Langage de programmation C ESI 2021-2022


Modification
 Une chaîne de caractères déclarée comme pointeur
sur char est constante

 Une chaîne de caractères déclarée comme tableau de


char n’est pas constante

La chaine de caractères initialement pointée par chaine est perdue !


70 Langage de programmation C ESI 2021-2022
Modification
 Une chaîne de caractères déclarée comme pointeur
sur char est constante

 Une chaîne de caractères déclarée comme tableau de


char n’est pas constante

71 Langage de programmation C ESI 2021-2022


Modification

ad1 ad2

ad2 'P' 'r' 'e' 'm' 'i' … 'e' '\0 '

chaine1

ad3 ad4

ad4 'D' 'e' 'u' 'x' 'i' … 'e' '\0 '

chaine2

72 Langage de programmation C ESI 2021-2022


Modification

ad1 ad2

ad4 'P' 'r' 'e' 'm' 'i' … 'e' '\0 '

chaine1

ad3 ad4

ad4 'D' 'e' 'u' 'x' 'i' … 'e' '\0 '

chaine2

La chaine de caractères initialement pointée par chaine1 est perdue !

73 Langage de programmation C ESI 2021-2022


Modification

ad1 ad2

ad4 'P' 'r' 'e' 'm' 'i' … 'e' '\0 '

chaine1

ad3 ad4

ad4 'D' 'e' 'u' 'x' 'i' … 'e' '\0 '

chaine2

74 Langage de programmation C ESI 2021-2022


Avantages de l’utilisation des pointeurs
 La représentation des chaînes de caractères par des
pointeurs offre plusieurs avantages

 La taille de la chaîne de caractères n’est pas fixée à


l’avance

 Les chaînes de caractères sont facilement utilisables par


les fonctions

75 Langage de programmation C ESI 2021-2022


Avantages de l’utilisation des pointeurs

76 Langage de programmation C ESI 2021-2022


Tableaux de pointeurs
Définition
 Un tableau de pointeurs permet de regrouper
plusieurs pointeurs de même type dans une même
variable

 Syntaxe de déclaration

type *nomTableau[taille] ;

78 Langage de programmation C ESI 2021-2022


Définition
 Un tableau de pointeurs permet de regrouper
plusieurs pointeurs de même type dans une même
variable

 Syntaxe de déclaration

type *nomTableau[taille] ;
 Ex : int *nombres[10] ;
char *nomsEtudiants[100] ;
int tab[4], *p[4] = {&tab[0], &tab[1], &tab[2], &tab[3]};
79 Langage de programmation C ESI 2021-2022
Utilisation
 Les tableaux de pointeurs sont souvent utilisés pour
stocker des chaînes de caractères de différentes
longueurs

char *prenomsEtudiants[3] = {"Sami", "Aya", "Karim"} ;

80 Langage de programmation C ESI 2021-2022


Utilisation
 Les tableaux de pointeurs sont souvent utilisés pour
stocker des chaînes de caractères de différentes
longueurs

81 Langage de programmation C ESI 2021-2022


Utilisation
 Les tableaux de pointeurs sont souvent utilisés pour
stocker des chaînes de caractères de différentes
longueurs

82 Langage de programmation C ESI 2021-2022


Utilisation
 Les tableaux de pointeurs sont souvent utilisés pour
stocker des chaînes de caractères de différentes
longueurs

83 Langage de programmation C ESI 2021-2022


Utilisation
 Les tableaux de pointeurs sont souvent utilisés pour
stocker des chaînes de caractères de différentes
longueurs

84 Langage de programmation C ESI 2021-2022


Langage de programmation C

5. Pointeurs

Vous aimerez peut-être aussi