Un puntero variable almacena la dirección de una variable (que debe ser de tipo no-puntos), pero cuando necesitamos almacenar la dirección de cualquier variable puntero, necesitamos un tipo especial de puntero conocido como “puntero a puntero” o “puntero double” .
Así , double puntero (puntero a puntero) es una variable que puede almacenar la dirección de una variable puntero .
Leer: Reglas de puntero en lenguaje de programación C.
Declaración de un puntero a puntero (double puntero) en C
Cuando declaramos una variable puntero que tenemos que utilizar dereferencing operador (asterisco), de manera similar, para declarar puntero a puntero, tenemos que utilizar dos asteriscos antes de que el identificador (nombre de la variable).
Aquí está un ejemplo
int **ptr;
Aquí , ptr es un puntero a puntero (puntero double); que puede almacenar la dirección de tan sólo una variable puntero.
Nota: no podemos inicializar un puntero double con la dirección de la variable normal; double puntero se puede inicializar con la dirección de tan sólo una variable puntero.
inicialización de un puntero a puntero (double puntero) en C
Podemos inicializar un puntero double el uso de dos maneras:
1) inicialización con la declaración
data_type **double_pointer_name= & pointer_name;
2) de inicialización después de la Declaración
data_type **doble_pointer_name;
double_pointer_name = & pointer_name;
Considere el ejemplo dado
#include <stdio.h>
int main()
{
int a=10; //normal variable
int *ptr_a; //pointer variable
//pointer initialization with the
//address of a (normal variable)
ptr_a = &a;
int **ptr_ptra; //pointer to pointer
//pointer to pointer initialization with the
//address of ptr_a (pointer variable)
ptr_ptra = &ptr_a;
printf("value of a: %dn",a);
printf("value of a using pointer: %dn",*ptr_a);
printf("value of a using pointer to pointer: %dn",**ptr_ptra);
return 0;
}
salida
value of a: 10
value of a using pointer: 10
value of a using pointer to pointer: 10