Bienvenidos sean a este post, hoy veremos un tema muy particular.
Hasta ahora vimos que los apuntadore apuntan a una variable pero que nos impide que un apuntador apunte a otro apuntador que apunta a la variable que deseamos apuntar?, absolutamente nada y esto se lo denomina como doble indireccion (double indirection), para lograr esto debemos desreferenciar dos veces nuestro apuntador, veamos como es su sintaxis:
tipo_dato** nombre_apuntador = &nombre_apuntador;
Como pueden ver es muy similar a declarar un apuntador pero con la salvedad de que agregamos una desreferencia mas y en lugar de pasar una variable tenemos otro apuntador, para entenderlo mejor vamos a crear un ejemplo simple, para ello generen un nuevo archivo con el nombre ejemplo13.c y le agregaremos el siguiente codigo:
ejemplo13.c
#include <stdio.h>
int main()
{
int valores = 10;
int* a_valores = &valores;
int** aa_valores = &a_valores;
printf("Valores:\n");
printf("valores: %i\n", valores);
printf("&valores: %x\n", &valores);
printf("a_valores: %x\n", a_valores);
printf("aa_valores: %x\n", aa_valores);
printf("**aa_valores: %i\n", **aa_valores);
return 0;
}
Este no es un ejemplo practico pero nos sera de utilidad para entender un poco mejor como trabaja, primeor definiremos una variable llamada valores con un valor, lo siguiente sera definir el apuntador a esta, para finalmente definir otro apuntador al apuntador anterior, observen que en el ultimo caso agregamos otra letra mas para identificarlo como tal, lo siguiente que haremos es mostrar varios valores, en el primer caso mostraremos el valor de la variable, en el segundo caso mostraremos la direccion de memoria de la variable en el tercer caso mostraremos la direccion almacenada en el primer apuntador (a_valores), en el siguiente mostraremos la direccion almacenada en el segundo apuntador (aa_valores), una cosa que no mencione es que en todos los casos donde mostramos la direccion de memoria utilizamos el modificador para mostrar valores hexadecimales y poder ver correctamente el valor de memoria y en el ultimo caso mostraremos el valor desreferenciado del segundo apuntador, con todo esto comentado compilemos y veamos su salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo13
Valores:
valores: 10
&valores: e26f6bc4
a_valores: e26f6bc4
aa_valores: e26f6bb8
**aa_valores: 10
tinchicus@dbn001vrt:~/lenguajes/C$
Aqui tenemos varias curiosidades pero esperadas, observen la direccion de memoria de la variable y el apuntador coinciden pero la del segundo apuntador no, dado que nos devuelve la direccion de memoria del primer apuntador pero si nosotos le pedimos que nos devuelva el valor desreferenciado si nos pasa el valor de la variable, porque si bien apunta a otra direccion de memoria cuando llegue a esta saltara a la otra direccion de memoria, parece brujeria y lo es, pero esto es un tema mas avanzado que lo aplicaremos en algun codigo pero mucho mas adelante pero lo principal es que sepa que esto existe y trabaja de esta forma.
En resumen, hoy hemos visto como es la doble indireccion, o lo mismo que decir un apuntador que apunta a otro apuntador, hemos visto como se define y un ejemplo practico para verlo como trabaja pero todavia no en la vida real, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
