Post

Fiche Les Pointeurs en C

Fiche de révisions : Les Pointeurs en C

1. Qu’est-ce qu’un pointeur?

Un pointeur est une variable qui stocke l’adresse mémoire d’une autre variable. Il permet d’accéder et de manipuler directement la mémoire, ce qui rend la gestion des données plus efficace et permet de manipuler des structures complexes.

2. Déclaration et initialisation d’un pointeur

1
2
3
int *ptr;  // ptr est un pointeur vers un entier
int var = 10;
ptr = &var;  // ptr est initialisé avec l'adresse de var

3. Accès a la valeur d’un pointeur

L’opérateur * permet d’accéder à la valeur stockée à l’adresse pointée.

1
int value = *ptr;  // value est maintenant 10

4. Pointeurs et tableaux

Le nom d’un tableau agit comme un pointeur vers son premier élément.

1
2
int arr[3] = {1, 2, 3};
int *ptr = arr;  // ptr pointe vers le premier élément de arr

5. Arithmétique des pointeurs

Les pointeurs supportent certaines opérations arithmétiques :

  • Incrémentation (++) : fait pointer le pointeur vers l’élément suivant.
  • Décrémentation (--) : fait pointer le pointeur vers l’élément précédent.
1
2
3
4
int arr[] = {10, 20, 30};
int *p = arr;  // p pointe vers arr[0]
p++;
printf("%d", *p);  // Affiche 20

6. Pointeurs et fonctions

Les pointeurs sont utilisés pour passer des arguments par référence, permettant à une fonction de modifier la variable originale.

1
2
3
4
5
6
7
8
void increment(int *num) {
    (*num)++;
}
int main() {
    int value = 5;
    increment(&value);
    printf("%d", value);  // Affiche 6
}

7. Pointeurs de pointeurs

Un pointeur peut stocker l’adresse d’un autre pointeur.

1
2
3
4
int val = 5;
int *ptr = &val;
int **ptr_to_ptr = &ptr;
printf("%d", **ptr_to_ptr);  // Affiche 5

8. Allocation dynamique de mémoire

Les pointeurs permettent de gérer la mémoire dynamiquement.

1
2
3
int *ptr = (int *)malloc(sizeof(int));
*ptr = 10;
free(ptr);  // Libération de la mémoire allouée

9. Pointeurs et structures

Les pointeurs peuvent être utilisés pour manipuler des structures de données complexes.

1
2
3
4
5
6
7
8
struct Point {
    int x;
    int y;
};

struct Point p1 = {10, 20};
struct Point *p = &p1;
printf("%d", p->x);  // Affiche 10

10. Pointeurs NULL

Un pointeur peut être initialisé à NULL pour indiquer qu’il ne pointe vers aucune adresse valide.

1
int *p = NULL;

11. Erreurs courantes

  • Déréférencement d’un pointeur NULL :
    1
    2
    
    int *p = NULL;
    printf("%d", *p);  // Erreur !
    
  • Fuite mémoire : Ne pas libérer une mémoire allouée dynamiquement.
  • Accès à une mémoire libérée :
    1
    2
    
    free(p);
    printf("%d", *p);  // Comportement indéfini
    

12. Bonnes pratiques

  • Toujours initialiser les pointeurs (int *p = NULL;).
  • Toujours libérer la mémoire allouée (free(ptr);).
  • Utiliser const si le pointeur ne doit pas modifier la valeur pointée.
Le contenu de cet article est la propriété exclusive de son auteur.