Pointers may also represent the concept of multiple
indirection (see Section 5.2). The rule to derive
from a type T a type “pointer to T” can be applied to this last
type to obtain a “pointer to pointer to T” defined as
“T **”.
These multiple pointers have the same than a regular pointer, the difference is only in the number of indirections to obtain the data. The following program is an example in which pointers with several indirection levels are manipulated:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <stdio.h>
int main()
{
int i;
int *ptrToi; /* Pointer to integer */
int **ptrToPtrToi; /* Pointer to pointer to integer */
ptrToPtrToi = &ptrToi; /* Pointer contains address of pointer */
ptrToi = &i; /* Pointer contains address of integer */
i = 10; /* Direct assignment */
*ptrToi = 20; /* Indirect assignment */
**ptrToPtrToi = 30; /* Assignment with double indirection */
return 0;
} |
The following figure shows the evolution of the value of all
variables during the code execution. Note that even though there is no
value assigned to variable i, the address of any variable can
be obtained and stored without any problem.

Copy and paste the content of the previous program in a
text file in your development environment. Use the instruction
“printf("%d\n", x);” to print the integer
referred by “x”. Modify the assignments and
print the variables to show how the indirection is performed.