Professional Documents
Culture Documents
1 Pointeurs
1 Pointeurs
Les pointeurs
Pointeurs et fonctions
Pointeurs et tableaux
Structures de données en C
Chap 1 : Rappel sur les pointeurs
Laila AMIR 1 / 44
Introduction
Les pointeurs
Pointeurs et fonctions
Pointeurs et tableaux
Plan
1 Introduction
Intérêt des pointeurs
2 Les pointeurs
Notion d’un pointeur
Les opérateurs de base &, *
Déclaration et initialisation d’un pointeur
Accéder à une variable pointée
3 Pointeurs et fonctions
Portée d’une variable
Passage de paramètres par valeur ou par adresse
4 Pointeurs et tableaux
Pointeurs et tableaux à une dimension
Pointeurs et tableaux à plusieurs dimensions
Laila AMIR 2 / 44
Introduction
Les pointeurs
Intérêt des pointeurs
Pointeurs et fonctions
Pointeurs et tableaux
Outline
1 Introduction
Intérêt des pointeurs
2 Les pointeurs
Notion d’un pointeur
Les opérateurs de base &, *
Déclaration et initialisation d’un pointeur
Accéder à une variable pointée
3 Pointeurs et fonctions
Portée d’une variable
Passage de paramètres par valeur ou par adresse
4 Pointeurs et tableaux
Pointeurs et tableaux à une dimension
Pointeurs et tableaux à plusieurs dimensions
Laila AMIR 3 / 44
Introduction
Les pointeurs
Intérêt des pointeurs
Pointeurs et fonctions
Pointeurs et tableaux
Laila AMIR 4 / 44
Introduction
Les pointeurs
Intérêt des pointeurs
Pointeurs et fonctions
Pointeurs et tableaux
Laila AMIR 5 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
Outline
1 Introduction
Intérêt des pointeurs
2 Les pointeurs
Notion d’un pointeur
Les opérateurs de base &, *
Déclaration et initialisation d’un pointeur
Accéder à une variable pointée
3 Pointeurs et fonctions
Portée d’une variable
Passage de paramètres par valeur ou par adresse
4 Pointeurs et tableaux
Pointeurs et tableaux à une dimension
Pointeurs et tableaux à plusieurs dimensions
Laila AMIR 6 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
Un pointeur est une variable spéciale qui peut contenir l’adresse d’une
autre variable.
Laila AMIR 7 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
Remarque :
Laila AMIR 8 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
Laila AMIR 9 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
L’opérateurs : &, *
L’opérateur ’adresse de’ : &
& NomVariable
fournit l’adresse de la variable NomVariable
L’opérateur & est utilisé dans la fonction scanf, pour désigner l’adresse de
la variable dans laquelle on veut stocker une valeur.
Exemple :
int N;
printf(”Entrez un nombre entier : ”);
scanf(”%d”, &N);
Représentation schématique
Laila AMIR 11 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
Exemple 2
Laila AMIR 12 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
Exemple 2 (suite)
=>
Laila AMIR 13 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
Type * NomPointeur;
déclare un pointeur NomPointeur qui peut recevoir des adresses de
variables du type Type.
Laila AMIR 14 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
NomPointeur = &nom-de-la-variable-pointee;
Exemple :
int *p1;
int a = 2;
p1 = &a;
Laila AMIR 15 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
Exemple :
int *p1;
int a = 2;
p1 = &a;
*p1 = 10;
Après ces instructions, le contenu de la variable a sera 10.
Laila AMIR 16 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
Exemple complet
#include <stdio.h>
int main(){
int a, b, c;
int *x, *y;
a = 98; Exécution :
x = &a;
c = *x + 5; La variable b vaut 108
y = &b; La variable c vaut 103
*y = a + 10;
printf(”La variable b vaut :%d ”, b);
printf(”La variable c vaut :%d”, c);
return 0;
}
Laila AMIR 17 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
Explications :
Dans ce programme, on déclare 3 variables a, b et c. On déclare ensuite 2
pointeurs vers des entiers x et y. a est initialisé à 98.
x=&a; permet de mettre dans le un pointeur x l’adresse de a.
*x est la variable pointée par x. a vaut donc 98 après évaluation.
c=*x+5; permet donc de transférer 98+5 donc 103 dans la variable c.
y=&b permet de mettre dans la variable y l’adresse de la variable b. y
est désormais un pointeur vers b.
a+10 vaut 98+10 donc 108.
*y=a+10; permet de transférer dans la variable pointée par y la
valeur de a+10, c’est-à-dire 108. On stocke donc 108 dans b, de
manière indirecte via le pointeur y.
on affiche ensuite les valeurs de b et c c-à-d respect. 108 et 103.
Laila AMIR 18 / 44
Introduction Notion d’un pointeur
Les pointeurs Les opérateurs de base &, *
Pointeurs et fonctions Déclaration et initialisation d’un pointeur
Pointeurs et tableaux Accéder à une variable pointée
Le pointeur NUL
Laila AMIR 19 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Outline
1 Introduction
Intérêt des pointeurs
2 Les pointeurs
Notion d’un pointeur
Les opérateurs de base &, *
Déclaration et initialisation d’un pointeur
Accéder à une variable pointée
3 Pointeurs et fonctions
Portée d’une variable
Passage de paramètres par valeur ou par adresse
4 Pointeurs et tableaux
Pointeurs et tableaux à une dimension
Pointeurs et tableaux à plusieurs dimensions
Laila AMIR 20 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Remarque :
Les variables globales déclarés après les includes sont visibles et
modifiables de partout et leur durée de vie celle du programme
=> A manipuler avec précaution (dangereux!).
Laila AMIR 21 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Remarque :
Les variables globales déclarés après les includes sont visibles et
modifiables de partout et leur durée de vie celle du programme
=> A manipuler avec précaution (dangereux!).
Laila AMIR 21 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Une variable globale peut également être visible dans des fonctions
écrites dans d’autres fichiers sources du programme.
Pour cela, il faut rédeclarer son prototype dans l’autre fichier en
utilisant le mot clé extern.
Laila AMIR 22 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Exemple
#include <stdio.h>
double x;// Variables globales
int N;
int f1(){
int N; // variable locale masque la variable globale de même nom
int i = 0; // autre variable locale
while(..){
int N; // N locale, masque l’autre N locale & globale
...
}
x = ...; // Utilisation de la variable globale x (déconseillé)
}
int main(){
// dans le main, x et N sont accessibles mais pas i
}
Laila AMIR 23 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Laila AMIR 24 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Laila AMIR 25 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Laila AMIR 26 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Explication
Laila AMIR 27 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Comme nous l’avons constaté ci-dessus, une fonction n’obtient que les
valeurs de ses paramètres. Pour changer la valeur d’une variable de la
fonction appelante, nous allons procéder comme suit :
Laila AMIR 28 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Laila AMIR 29 / 44
Introduction
Les pointeurs Portée d’une variable
Pointeurs et fonctions Passage de paramètres par valeur ou par adresse
Pointeurs et tableaux
Explication
Laila AMIR 30 / 44
Introduction
Les pointeurs Pointeurs et tableaux à une dimension
Pointeurs et fonctions Pointeurs et tableaux à plusieurs dimensions
Pointeurs et tableaux
Outline
1 Introduction
Intérêt des pointeurs
2 Les pointeurs
Notion d’un pointeur
Les opérateurs de base &, *
Déclaration et initialisation d’un pointeur
Accéder à une variable pointée
3 Pointeurs et fonctions
Portée d’une variable
Passage de paramètres par valeur ou par adresse
4 Pointeurs et tableaux
Pointeurs et tableaux à une dimension
Pointeurs et tableaux à plusieurs dimensions
Laila AMIR 31 / 44
Introduction
Les pointeurs Pointeurs et tableaux à une dimension
Pointeurs et fonctions Pointeurs et tableaux à plusieurs dimensions
Pointeurs et tableaux
Pointeurs et tableaux 1D
Laila AMIR 32 / 44
Introduction
Les pointeurs Pointeurs et tableaux à une dimension
Pointeurs et fonctions Pointeurs et tableaux à plusieurs dimensions
Pointeurs et tableaux
Résumé
Et si P = tab, alors
P pointe sur l’élément tab[0] &tab[0]
P+i pointe sur l’élément tab[i] &tab[i]
*(P+i) désigne le contenu de tab[i] tab[i]
Laila AMIR 35 / 44
Introduction
Les pointeurs Pointeurs et tableaux à une dimension
Pointeurs et fonctions Pointeurs et tableaux à plusieurs dimensions
Pointeurs et tableaux
#define N 5
int tab[5] = {0, 1, 4, 20, 7};
main(){
int *P;
for (P =tab; P < tab+N; P++)
printf(”%d \n”, *P);
}
Laila AMIR 36 / 44
Introduction
Les pointeurs Pointeurs et tableaux à une dimension
Pointeurs et fonctions Pointeurs et tableaux à plusieurs dimensions
Pointeurs et tableaux
Laila AMIR 37 / 44
Introduction
Les pointeurs Pointeurs et tableaux à une dimension
Pointeurs et fonctions Pointeurs et tableaux à plusieurs dimensions
Pointeurs et tableaux
Laila AMIR 39 / 44
Introduction
Les pointeurs Pointeurs et tableaux à une dimension
Pointeurs et fonctions Pointeurs et tableaux à plusieurs dimensions
Pointeurs et tableaux
Laila AMIR 40 / 44
Introduction
Les pointeurs Pointeurs et tableaux à une dimension
Pointeurs et fonctions Pointeurs et tableaux à plusieurs dimensions
Pointeurs et tableaux
Laila AMIR 41 / 44
Introduction
Les pointeurs Pointeurs et tableaux à une dimension
Pointeurs et fonctions Pointeurs et tableaux à plusieurs dimensions
Pointeurs et tableaux
Laila AMIR 43 / 44
Introduction
Les pointeurs Pointeurs et tableaux à une dimension
Pointeurs et fonctions Pointeurs et tableaux à plusieurs dimensions
Pointeurs et tableaux
Laila AMIR 44 / 44