Punteros y memoria

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++

C
Ejecutar →
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;
}
Resultado esperado
score=75 same-address=yes
C++
Ejecutar →
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';
}
Resultado esperado
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.