Notions de pointeurs
Introduction aux pointeurs
En programmation C, un pointeur est une variable qui stocke l'adresse mémoire d'une autre variable. La compréhension des pointeurs est essentielle pour une gestion efficace de la mémoire et des techniques de programmation avancées.
Concept de mémoire et d'adresse
Les pointeurs permettent la manipulation directe des adresses mémoire. Chaque variable en C est stockée à une emplacement mémoire spécifique avec une adresse unique.
int x = 10;
int *ptr = &x; // ptr stocke l'adresse mémoire de x
Déclaration et initialisation des pointeurs
Les pointeurs sont déclarés en utilisant le symbole astérisque (*):
int *ptr; // Pointeur vers un entier
char *str; // Pointeur vers un caractère
double *dptr; // Pointeur vers un double
Types de pointeurs
| Type de pointeur |
Description |
Exemple |
| Pointeur entier |
Stocke l'adresse de variables entières |
int *ptr |
| Pointeur caractère |
Stocke l'adresse de caractères |
char *str |
| Pointeur void |
Peut stocker l'adresse de n'importe quel type |
void *generic_ptr |
Opérations sur les pointeurs
Opérateur adresse (&)
Récupère l'adresse mémoire d'une variable.
int x = 42;
int *ptr = &x; // ptr contient maintenant l'adresse mémoire de x
Opérateur de déréférencement (*)
Accède à la valeur stockée à l'adresse d'un pointeur.
int x = 42;
int *ptr = &x;
printf("%d", *ptr); // Affiche 42
Visualisation de la mémoire
graph TD
A[Variable x] -->|Adresse mémoire| B[Pointeur ptr]
B -->|Déréférencement| C[Valeur réelle]
Pièges courants avec les pointeurs
- Pointeurs non initialisés
- Déréférencement de pointeur nul
- Fuites mémoire
- Pointeurs suspendus
Bonnes pratiques
- Initialiser toujours les pointeurs
- Vérifier la valeur NULL avant la déréférence
- Libérer la mémoire allouée dynamiquement
- Utiliser const pour les pointeurs en lecture seule
Exemple pratique
#include <stdio.h>
int main() {
int x = 10;
int *ptr = &x;
printf("Valeur de x : %d\n", x);
printf("Adresse de x : %p\n", (void*)&x);
printf("Valeur de ptr : %p\n", (void*)ptr);
printf("Valeur pointée par ptr : %d\n", *ptr);
return 0;
}
En maîtrisant les pointeurs, vous débloquerez des techniques de programmation puissantes en C. LabEx recommande de pratiquer ces concepts pour développer de solides compétences en gestion de la mémoire.