【问题标题】:Pointer to pointer dereference with pre-increment operator使用预增量运算符指向指针取消引用的指针
【发布时间】:2016-12-01 14:35:12
【问题描述】:

以下程序给出的输出为 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]);
    }

【问题讨论】:

    标签: c pointers dereference pre-increment


    【解决方案1】:

    在您的代码中,**++pp; 与 * (* ( ++pp)); 相同。它首先增加指针,然后引用两次(第一个解除引用结果是指针类型,要详细说明)。

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

    警告:未使用计算的值

    你可以去掉解引用,没用。

    【讨论】:

    • 注释掉这条语句会影响输出
    • @NikhilVerma 我不是要求注释掉声明,删除取消引用,使用++pp;,你会得到相同的结果。
    • 当然会受到影响,因为pp不会增加,如果你注释掉的话。
    猜你喜欢
    • 1970-01-01
    • 2018-05-14
    • 2010-12-27
    • 2013-01-04
    • 2012-03-25
    • 2010-10-25
    • 2014-01-12
    • 2015-10-21
    • 2017-07-18
    相关资源
    最近更新 更多