2016-07-27 22 views
0

Das folgende Programm gibt Ausgabe als 17,29,45; Ich kann nicht verstehen, was **++pp; bedeutet. Kann jemand das Programm im Detail erklären.Pointer Dereferenzierung mit Pre-Inkrement-Operator

#include <stdio.h> 

    int main() { 
     static int a[] = {10, 22, 17, 29, 45}; 
     static int *p[] = {a, a + 2, a + 1, a + 4, a + 3}; 
     int **pp = p; 
     **++pp; 
     printf("%d %d %d", **pp, *pp[3], pp[0][2]); 
    } 

Antwort

3

in Ihrem Code ist **++pp; die gleiche wie * (* (++pp));. Es inkrementiert zuerst den Zeiger und dann die Referenzen zweimal (das erste Dereferenzierungsergebnis ist vom Zeigertyp, um ausführlich zu sein).

Der durch Dereferenzierung erhaltene Wert wird jedoch nicht verwendet. Wenn Sie Compiler-Warnungen aktiviert haben, werden Sie etwas wie sehen

Warnung erhalten: Wert berechnet wird, verwendet nicht

Sie den dereferenzierenden entfernen können, ist es nichts.

+0

Grund für die Eingabeaufforderung? –

+0

Ausgabe ist betroffen, wenn ich diese Aussage auskommentieren –

+1

@NikhilVerma Ich bin nicht aufgefordert, die Aussage zu kommentieren, entfernen Sie die Dereferenzen, verwenden Sie '++ PP;' und Sie erhalten das gleiche Ergebnis. –