0% ont trouvé ce document utile (0 vote)
55 vues15 pages

Comprendre les pointeurs en C

Le document décrit les pointeurs en langage C, y compris leur définition, déclaration et utilisation avec des tableaux et l'allocation dynamique de mémoire. Les pointeurs contiennent l'adresse d'autres variables et peuvent être utilisés pour accéder au contenu de ces variables de manière indirecte. Les tableaux et les pointeurs sont étroitement liés en C.

Transféré par

medamineeleuch98
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
55 vues15 pages

Comprendre les pointeurs en C

Le document décrit les pointeurs en langage C, y compris leur définition, déclaration et utilisation avec des tableaux et l'allocation dynamique de mémoire. Les pointeurs contiennent l'adresse d'autres variables et peuvent être utilisés pour accéder au contenu de ces variables de manière indirecte. Les tableaux et les pointeurs sont étroitement liés en C.

Transféré par

medamineeleuch98
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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