UC3M

Telematic/Audiovisual Syst./Communication Syst. Engineering

Systems Architecture

September 2017 - January 2018

5.6.  Pointers to pointers

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.

Suggestion

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.