2016-07-27 71 views
0

以下程序给出的输出为17,29,45;我不明白**++pp;是什么意思。任何人都可以详细解释程序。指针指向预增值运算符的指针取消引用

#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]); 
    } 

回答

3

在你的代码,**++pp;是一样的* (* (++pp));。它首先增加指针,然后推迟两次(第一次解除引用结果是指针类型,详细说明)。

但是,不使用通过解引用获得的值。如果你启用了编译器警告,你能看到类似

警告:计算值不用于

您可以删除反引用,也没有用。

+0

提示downvote的原因是什么? –

+0

当我评论这条语句时,输出会受到影响 –

+1

@NikhilVerma我并不是要求将语句注释掉,而是使用'++ pp;'来取消引用,您将得到相同的结果。 –