Punteros y direcciones
Un puntero contiene la dirección de un objeto compatible.
¿Qué es Punteros y direcciones?
Un puntero contiene la dirección de un objeto compatible.
Guarda una dirección, desreferénciala y modifica el objeto original.
Puntos importantes
- Todo puntero debe apuntar a un objeto vivo compatible o ser null.
- Libera exactamente una vez cada allocation propia.
- Expresa ownership y const con claridad.
Ejemplos de código C y 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
Comparación entre C y C++
C usa punteros raw directamente. C++ los conserva para acceso no propietario y prefiere referencias cuando null no tiene sentido.
C
Ownership y limpieza son convenciones manuales.
C++
Los contenedores y RAII codifican ownership y limpieza en el lifetime.
Ejercicios prácticos
Ejecuta ambas versiones y modifícalas para observar sus garantías.
- Prueba null y fallos de allocation.
- Usa AddressSanitizer y UndefinedBehaviorSanitizer.
- Documenta el ownership de cada puntero.