Académique Documents
Professionnel Documents
Culture Documents
Niveaux: 1A
Equipe ALGO
Année universitaire:
2022/2023
1
Objectifs Spécifiques
A la fin de ce chapitre, l’étudiant sera capable de :
2
Problématique 1
Il se peut que pendant l’exécution, l’utilisateur choisit une taille qui dépasse
cette taille maximale. Que devons nous faire ?
Solution
7
Définition
Un pointeur est une variable qui peut contenir l’adresse d’un espace mémoire
alloué ou l’adresse d’une autre variable.
x: entier 0
x← 0
…. H004 H008 H016 ….
Adressage Indirecte
L’adressage indirecte consiste à accéder à la valeur d’une variable en passant par un pointeur
contenant l’adresse de la variable.
X P
Exemple:
0 H008
X: entier
X← 0 …. H004 H008 H016 H020
Remarque:
Un pointeur qui ne contient aucune adresse doit être initialisé à NULL( Not Identified
Link), sinon il va pointer n’importe ou!
Opérateurs de base
Opérateur « adresse de »: &
Exemple: X P
VARIABLE
P: pointeur sur entier
X:entier
0 H008
Adresse de X
Opérateurs de base
Opérateur « contenu de »: *
Avant d’accéder au contenu,
L’opérateur * permet de récupérer le contenu d’une variable il faut s’assurer que le
pointeur est différent de
NULL!
• Syntaxe: *<nom_pointeur>: fournit le contenu du pointeur <nom_pointeur>
X P
Exemple:
VARIABLE
P: pointeur sur entier
X:entier 0 H008
15
Pointeur et Tableau
Un tableau est un pointeur statique contenant l’adresse d’un espace mémoire
contiguë qui est aussi l’adresse du premier élément du tableau.
C’est à dire les 2 écritures suivantes sont équivalentes:
T=&T[1]
Remarque:
Vous n’avez pas le droit de changer la valeur d’un tableau statique: T ←T2
T T[1] T[2]
Exemple:
T: tableau de 2 entiers
T[1] ← 0
T[2] ← 1 H008 0 1
• Les adresses des éléments sont identifiées par : T, T+1, T+2, … T+N-1
• Les valeurs des éléments sont identifiées par : *T, *(T+1), *(T+2), ..., *(T+N-1)
T T[1] T[2]
H008 0 1
Algorithme 1 Algorithme 2
T: tableau [1..50] d’entier T: tableau [1..50] d’entier
n , i: entier n , i: entier
p: pointeur sur entier
Pour i de 1 à n Faire i ←1
*(T+i-1) ← i Pour p de T à T+n-1 Faire
Fin Pour *p ← i
i ←i+1
Fin Pour
Exercice d’application 2
T H004
T+1 H008
*T 2 2 0 1 … H004
*(T+1) 0
…. H004 H008 H016 H020
&T[2] H008
T+2 H016
PARTIE I: Pointeurs et
Fonctions/Procédures
20
Quelques contraintes
Une fonction est un sous programme permettant de faire un traitement et de retourner
un résultat unique. Comment faire pour retourner plusieurs résultats ?
Supposons que nous souhaitons modifier la valeur d’une variable passée en paramètre
à une fonction. Comment faire?
Le passage par adresse est utilisé pour modifier le contenu des variables déclarées
dans d’autres fonctions.
Passage de paramètre par valeur
27
Pointeur et enregistrement
Un pointeur peut aussi contenir l’adresse d’un enregistrement
Début
Saisir(&ET)
Ecrire(ET)
Fin
PARTIE II: Allocation
Dynamique
30
Allocation statique
Les variables créées de manière statique sont allouées et libérées
automatiquement par le système d'exploitation. L'espace à allouer est connu
durant la phase de compilation.
Exemple 1: supposons qu’on a déclaré un tableau de 20 Etudiants, Comment
faire pour ajouter l’étudiant numéro 21?
Exemple:
Variable
P: *entier
Début
P ← allouer(taille(entier))
Fin
Allocation dynamique et libération
Exemple:
libérer(P)