Lets write C program to learn the concept of pointer pointing to another pointer. It’s also called as Multiple Indirection or double pointer concept.
Note: We could go any level deep. For Example, a pointer can point to a pointer which is pointing to another pointer, which is pointer to a pointer pointing to another pointer and so on.
But only 2 concepts hold practical usage in our programs:
1. The pointer concept.
2. Pointer to Pointer concept.
Related Read:
Basics of Pointers In C Programming Language
Very Important Note:
Any address preceded by a * (Indirection operator) will fetch the value present at that address.
Example:
int num = 5; int *ptr1, **ptr2; ptr1 = # ptr2 = &ptr1;
According to above code, ptr1 holds the address of variable num. So *ptr1 should fetch the value present at the address num. If you print out the *ptr1 you’ll get 5 as the result.
Similarly, ptr2 holds the address of pointer variable ptr1. *ptr2 fetches the value present at the address ptr1 – which is address of num. If we print out *(*ptr2) it prints out the value present at num, which is 5.
Video Tutorial: Pointer To A Pointer In C Programming Language
[youtube https://www.youtube.com/watch?v=p9KzkDR8dxc]
Source Code: Pointer To A Pointer In C Programming Language
#include<stdio.h> int main() { int num = 5; int *ptr1, **ptr2; ptr1 = # printf("Num = %d\n", num); printf("Address of Num, using variable num = %d.\n", &num); printf("Address of Num, using pointer ptr1 = %d.\n", ptr1); printf("Value present at Address %d is %d.\n\n", ptr1, *ptr1); ptr2 = &ptr1; printf("Address of pointer variable ptr1 = %d\n", ptr2); printf("Value present at address %d is %d, which in turn holds the value %d.\n", ptr2, *ptr2, **ptr2); return 0; }
Output:
Num = 5
Address of Num, using variable num = 6356728.
Address of Num, using pointer ptr = 6356728.
Value present at Address 6356728 is 5.
Address of pointer variable ptr1 = 6356724
Value present at address 6356724 is 6356728, which in turn holds the value 5.
Homework: Do it on your own
According to above program
int ***ptr3; ptr3 = &ptr2; printf("%d", ***prt3);
What will be the output?
Note: Take pen and paper. First know the value present at ptr3. Next check the result for *ptr3. Then check for **ptr3 and then finally ***ptr3.
Hint:
ptr3 holds address of ptr2.
i.e., ptr3 = &ptr2;
*ptr3 can be writte an *(&ptr2).
*(&ptr2) will fetch the value present at address &ptr2, which is address of pointer variable ptr1.
i.e., *(&ptr2) = &ptr1.
Next, *(&ptr1) will fetch the value present at &ptr1, which is address of num.
i.e., *(&num) which is equal to 5.
For list of all c programming interviews / viva question and answers visit: C Programming Interview / Viva Q&A List
For full C programming language free video tutorial list visit:C Programming: Beginner To Advance To Expert