Pointeurs et adresses
Un pointeur contient l’adresse d’un objet compatible ; le déréférencement accède à cet objet.
Qu’est-ce que Pointeurs et adresses ?
Un pointeur contient l’adresse d’un objet compatible ; le déréférencement accède à cet objet.
Stockez une adresse, déréférencez-la et modifiez l’objet d’origine.
Points importants
- Un pointeur doit viser un objet vivant compatible ou être null.
- Chaque allocation possédée doit être libérée exactement une fois.
- Exprimez clairement ownership et const.
Exemples de code C et C++
main.c
#include <stdio.h>
int main(void) {
int score = 70;
int *score_ptr = &score;
*score_ptr += 5;
printf("score=%d same-address=%s\n", score,
score_ptr == &score ? "yes" : "no");
return 0;
}
score=75 same-address=yes
C++
main.cpp
#include <iostream>
int main() {
int score = 70;
int* score_ptr = &score;
*score_ptr += 5;
std::cout << "score=" << score << " same-address="
<< std::boolalpha << (score_ptr == &score) << '\n';
}
score=75 same-address=true
Comparaison entre C et C++
C emploie directement les pointeurs bruts. C++ les conserve pour l’accès non propriétaire et préfère une référence lorsque null n’a pas de sens.
C
Ownership et nettoyage sont des conventions gérées manuellement.
C++
Les conteneurs et RAII encodent ownership et nettoyage dans la durée de vie.
Exercices pratiques
Exécutez les deux versions puis modifiez-les pour observer leurs garanties.
- Testez null et les échecs d’allocation.
- Utilisez AddressSanitizer et UndefinedBehaviorSanitizer.
- Documentez l’ownership de chaque pointeur.