8.3: Desreferenciación de puntero
- Page ID
- 82041
Supongamos que tiene el siguiente fragmento de código:
char *pc, c, b; c = 1; pc = &c;
Hemos declarado dos variables, un char
y un puntero a un char
. Luego establecemos el contenido del char
en 1, y establecemos el contenido del puntero a la dirección del char
. Realmente no necesitamos saber qué es esta dirección, pero por el bien del argumento, digamos que c
se encuentra en la dirección de memoria 2000 mientras que pc
se encuentra en la dirección de memoria 3000. Si tuviéramos que buscar en la memoria de la computadora, en la dirección 2000 encontraríamos el número 1. En la dirección 3000, encontraríamos el número 2000, es decir, la dirección de la variable char. En un sistema típico, este valor podría alcanzar 32 bits o 4 bytes. En otras palabras, la memoria utilizada por pc
son las direcciones 3000, 3001, 3002 y 3003. Por el contrario, en un sistema de 16 bits, pc
solo abarcaría 3000 y 3001 (la mitad de bytes, pero muchas menos direcciones posibles).
Como el contenido de (es decir, el valor de) pc
nos dice dónde reside un char
, podemos llegar a esa ubicación, y así el valor de la variable char
c.
Para ello, desreferenciamos el puntero con un asterisco. Podríamos decir:
b = *pc;
Lee esto como “b
obtiene el valor en la dirección dada por pc
”. Es decir, pc no nos da el valor, más bien, nos dice a dónde ir para obtener el valor. Es como si fueras a la oficina de tu profesor y pidieras tu calificación, y en cambio te entrega un trozo de papel que dice “Te lo enviaré por correo electrónico”. El trabajo no indica tu calificación, pero te muestra dónde encontrarla. Esto puede sonar indebidamente complicado al principio pero resulta tener innumerables usos. Por cierto, en este ejemplo el valor de b
será 1 porque pc
apunta a c
, al que se le asignó el valor 1 al inicio. Es decir, b
obtiene el valor en la dirección pc
apunta a, que es simplemente c.