Vous êtes sur la page 1sur 15

Les pointeurs

Adressage direct
• L’adressage direct permet un accès au contenu d’une
variable en utilisant le nom de la variable.
Adressage indirect
• L’adressage indirect permet un accès au contenu d’une
variable en passant par un pointeur qui contient
l’adresse de cette variable.

Exemple :

x est une variable qui contient la valeur 5


q est une variable qui contient la valeur F802H
Pointeur
• Définition : un pointeur est une variable spéciale qui
contient l’adresse d’une autre variable.
• En langage C, chaque pointeur est limité à un type de
données
int *p1;
float *p2;
• Un pointeur peut contenir :
• l’adresse d’une variable simple
• l'adresse d'un élément d'un tableau
Pointeur
• Toute variable est définie par un nom, un type, une valeur
et une adresse.

• Le nom d’une variable reste toujours associé à une même


adresse.
• L’adresse d’une variable ne change pas. C’est la valeur
qu’elle soit adresse ou entière qui peut changer.
Pointeur
Déclaration : Les opérateurs :
Type * Opérateur d’adressage : &
NomPointeur; pour obtenir l’adresse d’une variable
Opérateur d’indirection : *
Exemples : pour accéder au contenu d’une adresse
int * p1;
float *p2; Exemples :
char *p3; int * p1; int x;
p1=&x;
Pointeur sur pointeur
Pointeur et tableaux
• En C, il existe une relation très étroite entre tableaux et
pointeurs.
• Chaque opération avec des indices de tableaux peut
aussi être exprimée à l'aide de pointeurs.
• Le nom d'un tableau représente l'adresse de son
premier élément.
• &tab[0] et tab sont une seule et même adresse.
• Le nom d'un tableau est un pointeur constant sur le
premier élément du tableau. En d’autres termes :
• La valeur de tab (ou &tab[0]) qui est une adresse ne peut pas
changer
• La valeur de tab[0] peut changer
Pointeur et tableaux
Pointeur et tableaux
Allocation dynamique de la mémoire
La fonction malloc
• La fonction malloc de la bibliothèque <stdlib.h> permet de
localiser et de réserver de la mémoire au cours d'un programme
• malloc(n) fournit l'adresse d'un bloc en mémoire de n octets
libres ou la valeur NULL s'il n'y a pas assez de mémoire.
l'opérateur sizeof
• On connait la taille de int ou float mais pas des types déclarés
par l’utilisateur
• malloc(n*sizeof(struct personne)) fournit l'adresse d'un bloc
en mémoire nécessaire pour n personnes
• malloc(n*sizeof(int)) fournit l'adresse d'un bloc en mémoire
nécessaire pour n entiers
Allocation dynamique de la mémoire
• La fonction free de la bibliothèque <stdlib.h> permet
de libérer un espace mémoire.
• free(p) libère le bloc de mémoire désigné par le pointeur
p.
• La fonction free ne change pas le contenu du pointeur.
• Recommandation :
free(p); p=NULL;
Allocation dynamique de la mémoire
• realloc
• Cette fonction ne conserve pas obligatoirement l’adresse
initiale de la zone, elle assure que le contenu de la zone
initiale est conservé.
• realloc (tab, 130 * sizeof(int))
• calloc
• Avec malloc, le contenu des éléments du tableau est
totalement aléatoire
• Avec calloc, les cases contiennent des valeurs nulles (tous les
bits du bloc alloué sont mis à 0).
Application 1 (tableau dynamique)
• Ecrire un programme C permettant de :
• Définir une structure personne comportant un numéro de
téléphone et un nom
• Saisir le nombre de personnes
• D’allouer le tableau de personnes
• Saisir le tableau de personnes
• D’afficher le tableau de personnes
Application 2 (tableau dynamique)
• Reprendre le programme C de l’application1 et après
saisie et affichage, vous devez:
• Demander à l’utilisateur une nouvelle taille du tableau
• Redimensionner le tableau de personnes
• Saisir les personnes manquantes (si la nouvelle taille est plus
grande)
• Afficher le nouveau tableau.

Vous aimerez peut-être aussi