C Pointer to Pointer

As we know that, a pointer is used to store the address of a variable in C. Pointer reduces the access time of a variable. However, In C, we can also define a pointer to store the address of another pointer. Such pointer is known as a double pointer (pointer to pointer). The first pointer is used to store the address of a variable whereas the second pointer is used to store the address of the first pointer. Let's understand it by the diagram given below.

 

 

The syntax of declaring a double pointer is given below.

int **p; // pointer to a pointer which is pointing to an integer. 

Consider the following example.

#include<stdio.h>
#include<conio.h>

void main ()  
{  
    int a = 10;  
    int *p;  
    int **pp;   
    p = &a; // pointer p is pointing to the address of a  
    pp = &p; // pointer pp is a double pointer pointing to the address of pointer p  
    printf("address of a: %x\n",p); // Address of a will be printed   
    printf("address of p: %x\n",pp); // Address of p will be printed  
    printf("value stored at p: %d\n",*p); // value stoted at the address contained by p i.e. 10 will be printed  
    printf("value stored at pp: %d\n",**pp); // value stored at the address contained by the pointer stoyred at pp  
}  

Output

 

C double pointer example

Let's see an example where one pointer points to the address of another pointer.

 

As you can see in the above figure, p2 contains the address of p (fff2), and p contains the address of number variable (fff4). 

Example

#include<stdio.h>
#include<conio.h>
int main(){  
int number=50;      
int *p;//pointer to int    
int **p2;//pointer to pointer        
p=&number;//stores the address of number variable      
p2=&p;    
printf("Address of number variable is %x \n",&number);      
printf("Address of p variable is %x \n",p);      
printf("Value of *p variable is %d \n",*p);      
printf("Address of p2 variable is %x \n",p2);      
printf("Value of **p2 variable is %d \n",*p);      
return 0;  
}  

Output


 

MOST IMPORTANT POINTS TO BE REMEMBERED 

  1. To store the address of normal variable we use single pointer variable
  2. To store the address of single pointer variable we use double pointer variable
  3. To store the address of double pointer variable we use triple pointer variable
  4. Similarly the same for remaining pointer variables also…

 

No comments:

Post a Comment