
Si empezaste con Python o JavaScript, los punteros suenan a magia oscura reservada para ingenieros de sistemas con barba canosa. Si aprendiste C++ en la universidad, recuerdas pelear con los fallos de segmentación y las fugas de memoria.
Aquí está el secreto. Un puntero es una variable. Su valor es un número. Ese número guarda la dirección de otra cosa.
Para entender los punteros, primero tienes que saber dónde vive tu dato.
Cuando tu código corre, tu dato tiene que ir a algún sitio. Aterriza en la pila (stack) o en el montón (heap).
Imagina la pila como un montón de notas adhesivas en tu escritorio.
Si tienes una variable int a = 10;, normalmente vive aquí. Es rápida y segura.
El montón es un almacén gigante.
Un puntero es, simplemente, un letrero.
Si tienes una variable score = 99 en el montón (en la dirección 0x1234), un puntero es una variable diminuta en la pila que dice "El dato está en 0x1234".
int score = 99; // El valor real
int *p = &score; // El puntero 'p' contiene la dirección de 'score'p es la dirección. Te dice dónde está el dato. *p es el valor, lo que hay guardado en esa dirección.
¿Por qué no pasar valores a secas y dejar que el lenguaje limpie el desastre?
Imagina una imagen de 10MB. La pasas a una función process(image) y tu lenguaje la copia. Acabas de gastar 10MB de RAM y tiempo de CPU copiando píxeles. Con un puntero pasas la dirección (8 bytes). La función sabe dónde está la imagen y va a mirarla.
Pasas una variable por valor y la función recibe un clon. Cambiar el clon deja el original intacto. Con un puntero, la función sabe dónde vive el original. Puede modificar el dato real.
Las listas enlazadas, los árboles y los grafos son trozos de datos que guardan punteros a otros trozos de datos. No puedes construirlos sin referencias.
Los punteros no son gratis.
Los punteros son el puente entre tu código y el hardware. Aunque escribas JavaScript o Python de alto nivel, los objetos que tocas son referencias por debajo. Por eso a = b apunta a al mismo dato que b.
© Melvin Laplanche - All rights reserved.