Punteros dobles en C

Punteros dobles en C

Punteros dobles en C (Puntero a puntero)

Es un hecho conocido del tutorial anterior que la dirección de una variable se almacena en C usando los punteros que apuntan a una ubicación en la memoria. La principal ventaja de los punteros es que reducen el tiempo de acceso a las variables. Cada vez que se define el puntero a puntero, la dirección de la variable se almacena en el primer puntero y la dirección del primer puntero se almacena en el segundo puntero, por lo tanto, se denominan como punteros dobles en C idioma.

Comprendamos la declaración de un puntero a puntero en el lenguaje C

La declaración del puntero a punteros en el lenguaje C es muy similar a la declaración de un puntero en el lenguaje C. La única diferencia entre los dos es que en los punteros dobles se necesita un '*' extra justo antes del nombre del puntero.

Esta es la sintaxis del puntero a puntero en el lenguaje C:

int **p; // puntero a un puntero en lenguaje C que apunta a un número entero.

A continuación se muestra un diagrama para facilitarle la comprensión del proceso:

Tomemos un ejemplo de puntero a puntero:

#include<stdio.h>  
void main ()  
{  
    int x = 12;  
    int *a;  
    int **aa;   
    a = &x; // pointer a is pointing to the address of x  
    aa = &a; // pointer aa is x double pointer pointing to the address of pointer a  
    printf("address of x: %x\n",a); // Address of x will be printed   
    printf("address of a: %x\n",aa); // Address of a will be printed  
    printf("value stored at a: %d\n",*a); // value stoted at the address contained by a i.e. 10 will be printed  
    printf("value stored at aa: %d\n",**aa); // value stored at the address contained by the pointer stoyred at aa  
}  
Salida:
dirección de x:1a8e58cc
dirección de a:1a8e58d0
valor almacenado en a:12
valor almacenado en aa:12

Puntero doble en C otro ejemplo

Este ejemplo indica que un puntero apunta a otra dirección de puntero

#include<stdio.h>  
int main()
{  
int num=10;      
int *p;   
int **p2;        
p=&num ;      
p2=&p ;    
printf("Num variable address is = %x \n",&num);      
printf("p variable address is =%x \n",p);      
printf("*p variable value is = %d \n",*p);      
printf("p2 variable address is = %x \n",p2);      
printf("**p2 variable value is =%d \n",*p);      
return 0;  
}  
Salida:
Núm. dirección variable es =1131ddcc
p dirección variable es =1131ddcc
*p valor variable es =10
p2 dirección variable es =1131ddd0
**p2 el valor de la variable es =10