Beispielprogramm: Zeiger auf einen Zeiger, der auf double zeigt.

Im Skript findet sich eine Tabelle, in der die Speicherbelegung eines Zeigers auf einen Zeiger gezeigt ist, der seinerseits auf eine Variable vom Typ double zeigt. Der Inhalt der Tabelle wurde mit dem folgenden Programm erstellt:

    /*
    Dateiname: ZeigerAufZeiger.c
    Autor: Robert Heß
    Version: 1.0
    Datum: 14.10.2008
    Beschreibung: Gibt die Speicherbelegung von einem Zeiger auf einen Zeiger aus.
    */
    
    #include <stdio.h>
    
    int main()
    {
        double e=2.71828;   /* die Konstante e */
        double *pe=&e;      /* Zeiger auf die Konstante e */
        double **ppe=&pe;   /* Zeiger auf den Zeiger auf double */
        int i;              /* lokale Indexvariable */
    
        /* Ausgabe der Variablen */
        printf("Wert der Variable ppe: %p\n", ppe);
        printf("Wert der Variable pe:  %p\n", *ppe);
        printf("Wert der Variable e:   %lf\n", **ppe);
        printf("\n");
    
        /* Speicherbelegung der Variable e */
        printf("Speicherbelegung von >double e=2.71828;<\n");
        for(i=0; i<sizeof(e); i++) {
            printf("%p", (char*)&e+i);
            printf(" %02x\n", *((unsigned char*)&e+i));
        }
        printf("\n");
    
        /* Speicherbelegung der Variable pe */
        printf("Speicherbelegung von >double *pe=&e;<\n");
        for(i=0; i<sizeof(pe); i++) {
            printf("%p", (char*)&pe+i);
            printf(" %02x\n", *((unsigned char*)&pe+i));
        }
        printf("\n");
    
        /* Speicherbelegung der Variable ppe */
        printf("Speicherbelegung von >double **ppe=&pe;<\n");
        for(i=0; i<sizeof(ppe); i++) {
            printf("%p", (char*)&ppe+i);
            printf(" %02x\n", *((unsigned char*)&ppe+i));
        }
    
        return 0;
    }
    

Das Programm erzeugt folgende Ausgabe:

    Wert der Variable ppe: 0012FF74
    Wert der Variable pe:  0012FF78
    Wert der Variable e:   2.718280
    
    Speicherbelegung von >double e=2.71828;<
    0012FF78 90
    0012FF79 f7
    0012FF7A aa
    0012FF7B 95
    0012FF7C 09
    0012FF7D bf
    0012FF7E 05
    0012FF7F 40
    
    Speicherbelegung von >double *pe=&e;<
    0012FF74 78
    0012FF75 ff
    0012FF76 12
    0012FF77 00
    
    Speicherbelegung von >double **ppe=&pe;<
    0012FF70 74
    0012FF71 ff
    0012FF72 12
    0012FF73 00
    Press any key to continue
    
Seite 16