Un puntero es solo otro tipo de variable. Almacena la dirección de otra cosa. La necesidad de punteros es importante para comprenderlos.
Digamos que tienes algo grande en la memoria como una imagen o un archivo de audio. No desea mover mucho esa imagen en la memoria porque mover grandes cantidades de memoria requiere más tiempo y recursos que pasar una sola palabra o puntero. Entonces, el mejor método es cargar la imagen en la memoria y pasar la ubicación de esa imagen a quien necesite acceder a ella. Esto puede ser una analogía tonta, pero no muda su casa a la oficina de correos si espera una entrega, les da su dirección.
Trabajar con las direcciones de grandes cosas en la memoria, y no solo con sus valores literales, se hace con tanta frecuencia que los procesadores tienen instrucciones específicas para usar direcciones. Así es también como funciona el sistema de memoria en una computadora: hay cables conectados a chips de memoria que llevan la dirección, y otros que llevan los valores de datos. Piense en los punteros como las cosas que almacenan los valores que se colocan en el bus de direcciones.
C tiene el operador * para usar el valor en una variable como una dirección y no un valor literal. Esto significa que si tiene una variable que está almacenando la dirección de algo y coloca * delante, le está diciendo al compilador que use el valor almacenado en esa variable como una dirección a otro valor en otro lugar de la memoria.
- Estoy pensando en comprar mi primera patineta, ¿qué marcas o tipos me recomiendan?
- Estoy confundido con los términos Pepino, Carpincho y RSpec. ¿Cuál de estos debo elegir en mi nueva aplicación Rails?
- Si tuviera que comenzar un negocio de comercio electrónico, ¿cómo construyo mi inventario? Específicamente, ¿cómo se llega a los mayoristas? Por ejemplo, si tuviera una categoría de ‘electrónica’ y quisiera agregar ‘Samsung’ como producto, ¿cómo me pondría en contacto con los mayoristas de Samsung?
- Tengo un 100 Cien Intis (Perú) ¿vale algo ahora?
- Si amo vivir en Boston, ¿dónde más debería vivir?
Usar el operador & delante de una variable hace lo contrario. El uso de este carácter le dice al compilador que desea trabajar con la dirección, o ubicación en la memoria, de lo que sea que le ponga delante.
Existe un peligro si lo usa incorrectamente. Si usa el operador * delante de una variable que no almacena una dirección, es probable que obtenga un valor sin sentido, o si intenta escribir en él, obtendrá un error de segmentación y su programa se bloqueará. La computadora solo está haciendo lo que le dices, así que debes tener cuidado de no intentar escribir en la memoria que no te pertenece. Antes de los sistemas operativos modernos, como en DOS o Mas OS <9, el sistema operativo no le impedía escribir en la memoria que no era suya, por lo que era fácil bloquear toda la computadora, no solo su propio programa.
Puede almacenar la dirección de algo en cualquier tipo de variable, siempre que tenga el tamaño correcto. Esto no significa que * debas * pero significa que es posible. Por ejemplo, en una máquina de 32 bits, puedo almacenar la dirección de algo en un flotante de 32 bits, porque es solo otro valor de 32 bits. Puede hacer esto con un casting complicado, y no es una buena idea, pero solo muestra que un puntero es solo otro valor.