Vous êtes sur la page 1sur 46

Les Pointeurs

Brahimi Mohammed
Les pointeurs

● Exemple de motivation.

● Définition d'un pointeur.

● Opérateurs « & » , « * ».

● Passage par variable (par adresse).


Exemple de motivation

Fonction pour permuter deux variables (a,b)

void f(int a, int b)
{
int t;
a=4 Copie a=4 a=4
t=a ;
a=b ;
b=3 Copie b=3 b=3
b=t ;
}
Exemple de motivation

Fonction pour permuter deux variables (a,b)

void f(int a, int b)
{
int t;
a=4 Copie a=3 a=4
t=a ;
t=4
a=b ;
b=3 Copie b=4 b=3
b=t ;
}
Exemple de motivation

a=4 Copie a=3 a=4

b=3 Copie b=4 b=3

Deux cases mémoires distinctes


Définition d'un pointeur

Un pointeur est une variable contenant l'adresse


d'une autre variable d'un type donné.

● Si un pointeur P contient l'adresse d'une variable A, on


dit que « P pointe sur A ».
L'utilisation des pointeurs
● Syntaxe de déclaration
– déclarer un pointeur.

● Opérateur 'adresse de': &


– Obtenir l'adresse d'une variable.

● Opérateur 'contenu de': *
– Accéder au contenu d'une adresse.
Déclaration d'un pointeur
Réservation d'une case mémoire pour recvoir l'adresse d'une
variable de type « Type ».

Syntaxe
 
nom_pointeur : pointeur de type       (Algorithmique)
type *nom_pointeur;                   (langage C)
Exemples (Algorithmique)

● Var PointeurSurAge : poninteur d'entier

● Var p : pointeur de réel

● Var q : pointeur de caracter    
Exemples (C)

● int *PointeurSurAge ;

● double *p ; 

● char *q ;    
Opérateur « adresse de »: &

L'opérateur « &  » ou « adr  » est utilisé pour déterminer
l'adresse d'une variable.
Syntaxe

pointeurSurVariable = adr(Variable) (langage algorithmique)

pointeurSurVariable = &Variable     (En langage C)
Exemples

Var 
Age ????
Age:entier
PtrSurAge:pointeur d'entier
Début
Age     23
PtrSurAge     adr(Age)
Fin
Exemples

Var 
Age ????
Age:entier
PtrSurAge:pointeur d'entier
Début
Age     23
PtrSurAge     adr(Age) PtrSurAge ????
Fin
Exemples

Var 
Age 23
Age:entier
PtrSurAge:pointeur d'entier
Début
Age     23
PtrSurAge     adr(Age) PtrSurAge ????
Fin
Exemples

Var 
Age 23
Age:entier
PtrSurAge:pointeur d'entier
Début
Age     23
PtrSurAge     adr(Age) PtrSurAge adr(Age)

Fin
Exemples (En langage C)

Void main()
Age 23

   int Age ;
   int *PtrSurAge ;
Age=23 ;
PtrSurAge= &Age ; PtrSurAge adr(Age)

}
Opérateur « contenu de »: *
● L'opérateur « * » ou « valeur » pour accéder à la valeur de l'emplacement
mémoire pointé par un pointeur.
Syntaxe (Algorithmique)

ptrAge : pointeur d'entier
Age : entier
Début
Age      5
ptrAge      &age 
printf("Valeur du contenu de ptrAge =%d",valeur(ptrAge))
Fin   
Opérateur « contenu de »: *
● L'opérateur « * » ou « valeur » pour accéder à la valeur de
l'emplacement mémoire pointé par un pointeur.
Syntaxe

int *ptrAge ;
in Age ;
Age = 5;
ptrAge = &age ;

printf("Valeur du contenu de ptrAge =%d",*ptrAge) ;  
Exemples

void main()
{
int a=3;
int *p=&a;
*p = *p+1;
printf(" a =%d ", a) ;

Exemples

void main()
a 3
{
int a=3;
int *p=&a;
*p = *p+1;
printf(" a =%d ", a) ; p ????
}
Exemples

void main()
a 3
{
int a=3;
int *p=&a;
*p = *p+1;
printf(" a =%d ", a) ; p Adr(a)

}
Exemples

void main()
a 3+1
{
int a=3;
int *p=&a;
*p = *p+1;
printf(" a =%d ", a) ; p Adr(a)

}
Exemples

void main()
a 4
{
int a=3;
int *p=&a;
*p = *p+1;
printf(" a =%d ", a) ; p Adr(a)

}
Exemples

void main()
a 4
{
int a=3;
int *p=&a;
*p = *p+1;
printf(" a =%d ", a) ; p Adr(a)

}
Exemples

void main()
{
int a=3;
int *p=&a;
a = a+1;
printf(" a =%d ", *p) ;

Exemples

void main()
a 3
{
int a=3;
int *p=&a;
a = a+1;
printf(" a =%d ", *p) ; p ????
}
Exemples

void main()
a 3
{
int a=3;
int *p=&a;
a = a+1;
printf(" a =%d ", *p) ; p Adr(a)

}
Exemples

void main()
a 3+1
{
int a=3;
int *p=&a;
a = a+1;
printf(" a =%d ", *p) ; p Adr(a)

}
Exemples

void main()
a 4
{
int a=3;
int *p=&a;
a = a+1;
printf(" a =%d ", *p) ; p Adr(a)

}
Exemples

void main()
a 4
{
int a=3;
int *p=&a;
a = a+1;
printf(" *p =%d ", *p) ; p Adr(a)

}
Exemple
Après l'exécution de l'instruction :
int *p=&a;

*p       a 
Exemple de motivation

● Fonction pour permuter deux variables (a,b)


void f(int a, int b)
{
int t;
t=a ;
a=b ;
b=t ;
} a=4 Copie a=4 a=4
int main()
{
int a=3,b=4 ; b=3 Copie b=3 b=3
f(a,b) ;
}
Exemple de motivation
(Solution)
void f(int *a, int *b)
{
int t;
t=*a ;
*a=*b ;
*b=t ;
}

int main()
{
a=4

int a= 4,b=3 ;
f(&a,&b) ;
b=3
}
Exemple de motivation
(Solution)
void f(int *a, int *b)
{
int t;
t=*a ;
*a=*b ;
*b=t ;
}

int main()
{
a=4 *a

int a= 4,b=3 ; t= ?
f(&a,&b) ;
b=3 *b
}
Exemple de motivation
(Solution)
void f(int *a, int *b)
{
int t;
t=*a ;
*a=*b ;
*b=t ;
}

int main()
{
a=4 *a

int a= 4,b=3 ; t= 4
?
f(&a,&b) ;
b=3 *b
}
Exemple de motivation
(Solution)
void f(int *a, int *b)
{
int t;
t=*a ;
*a=*b ;
*b=t ;
}

int main()
{
a=4
a=3 *a

int a= 4,b=3 ; t= 4
f(&a,&b) ;
b=3 *b
}
Exemple de motivation
(Solution)
void f(int *a, int *b)
{
int t;
t=*a ;
*a=*b ;
*b=t ;
}

int main()
{
a=3 *a

int a= 4,b=3 ; t= 4
f(&a,&b) ;
b=3
b=4 *b
}
Permutation avec succès

a=4 a=3 *a
t= 4

b=3 b=3
b=4 *b
Résumé

Chaque variable est stockée à une


adresse précise en mémoire.
Résumé

Le pointeur stocke une adresse d'une


variable.
Résumé

Le symbole « & » devant un nom de


variable retourne son adresse.
– PtrA = & A ;
Résumé

Le symbole « * » devant un nom de


pointeur retourne la valeur de la
variable pointée par le pointeur.
– *ptrA donne la valeur de A
Résumé

Le passage par variable en C est


implementé à l'aide des pointeurs.
– Définition de la fonction : int f(type *a){………}
– L'apell de la fonction : f(&a;
Résumé
● Chaque variable est stockée à une adresse précise en mémoire.
● Le pointeur stocke une adresse d'un variable.
● Le symbole « & » devant un nom de variable retourne son adresse.
– PtrA = & A ;
● Le symbole « * » devant un nom de pointeur retourne la valeur de
de la variable pointée par le pointeur.
– *ptrA donne la valeur de A
● Le passage par variable en C est implementé à l'aide des
pointeurs.
– Définition de la fonction : int f(type *a){………}
– L'apell de la fonction : f(&a) ;
Les structures de données
se basent esentielement
sur la notion de pointeur.