Pointers to Pointers in C

Pointer to Pointer in C

Pointer to Pointer in C (Double 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.

pointer to pointer in c

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>

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

address of a: d26a8734
address of p: d26a8738
value stored at p: 10
value stored at pp: 10

Pointer to Pointer in C (double pointer) example:

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

C pointer to pointer example

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

#include<stdio.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

Address of number variable is fff4
Address of p variable is fff4
Value of *p variable is 50
Address of p2 variable is fff2
Value of **p variable is 50