Édition pédagogique en français
Pointeurs en C
Apprenez les adresses, le déréférencement, les limites et la durée de vie des objets.

Un pointeur contient une adresse associée à un type. & obtient l’adresse d’un objet et * accède à l’objet pointé. Avant tout déréférencement, assurez-vous que l’objet existe et que le type et la durée de vie conviennent.
L’arithmétique des pointeurs avance par unités du type pointé. On peut former un pointeur juste après la fin d’un tableau, mais pas le déréférencer. Soustraction et comparaisons d’ordre doivent respecter les règles concernant les objets d’un même tableau.
Passer un pointeur copie sa valeur. Cette copie permet de modifier l’objet, mais la remplacer ne modifie pas le pointeur de l’appelant. Retournez un nouveau pointeur ou recevez un pointeur vers pointeur pour le mettre à jour.
Initialisez les pointeurs, vérifiez les allocations et n’accédez jamais après free. Un dessin des objets et des flèches aide à comprendre listes et tableaux de pointeurs.
Code source
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(void) {
int score = 95;
int *ptr = &score;
printf("Value via ptr : %d\n", *ptr);
*ptr = 100;
printf("Updated score : %d\n", score);
int nums[4] = {10, 20, 30, 40};
int *p = nums;
for (int i = 0; i < 4; i++) {
printf("*(p + %d) = %d\n", i, *(p + i));
}
printf("Bytes between p and p + 1: %zu\n",
(size_t)((char *)(p + 1) - (char *)p));
int x = 1, y = 2;
swap(&x, &y);
printf("After swap: x = %d, y = %d\n", x, y);
int *heap = malloc(3 * sizeof(int));
if (heap == NULL) {
return 1;
}
for (int i = 0; i < 3; i++) {
heap[i] = (i + 1) * 5;
}
printf("Heap values: %d %d %d\n", heap[0], heap[1], heap[2]);
free(heap);
heap = NULL;
printf("heap is %s after free\n", heap == NULL ? "NULL" : "not NULL");
return 0;
}
Ouvrir dans le compilateurRésultat attendu
Value via ptr : 95 Updated score : 100 *(p + 0) = 10 *(p + 1) = 20 *(p + 2) = 30 *(p + 3) = 40 Bytes between p and p + 1: 4 After swap: x = 2, y = 1 Heap values: 5 10 15 heap is NULL after free
Questions fréquentes
Pourquoi le code et certains résultats restent-ils en anglais ?
Les mots-clés C, les identifiants, les commentaires du programme et les sorties attendues restent ceux de la version originale pour conserver un code exécutable et des tests cohérents. Les explications et les consignes sont traduites.