Puntatori e indirizzi
Un puntatore contiene l’indirizzo di un oggetto compatibile.
Che cos’è Puntatori e indirizzi?
Un puntatore contiene l’indirizzo di un oggetto compatibile.
Memorizza un indirizzo, dereferenzialo e modifica l’oggetto.
Punti importanti
- Ogni puntatore deve riferirsi a un oggetto vivo compatibile o essere null.
- Ogni allocation posseduta va liberata una sola volta.
- Esprimi chiaramente ownership e const.
Esempi di codice C e 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
Confronto tra C e C++
C usa raw pointer direttamente. C++ li mantiene per accesso non owning e preferisce reference quando null non è valido.
C
Ownership e cleanup sono convenzioni manuali.
C++
Container e RAII codificano ownership e cleanup nel lifetime.
Esercizi pratici
Esegui entrambe le versioni e modificale per osservare le diverse garanzie.
- Testa null e fallimenti di allocation.
- Usa AddressSanitizer e UndefinedBehaviorSanitizer.
- Documenta ownership di ogni puntatore.