为什么* p ++首先取消引用指针,然后再递增指针地址?

时间:2019-12-25 15:14:38

标签: c operators operator-precedence

C运算符优先级图表如下所示: C operator precedence

为什么帖子增量/减量首先在列表中,但是* p ++导致首先取消引用指针,然后递增指向的指针地址?

2 个答案:

答案 0 :(得分:3)

*p++解析为*(p++)

p++的值为p(副作用正在增加p),因此*p++的值与*p相同

除了副作用之外,*p*p++都是相同的。

与整数完全相同的事情:

int n = 6;
printf("%d\n", 7 * n);
printf("%d\n", 7 * n++); // except for the side-effect same value as above

答案 1 :(得分:-3)

在p ++中,由于++出现在 之后,因此代表后递增。这意味着,如果要使用p执行某些任务,则将使用值p,并且仅在完成该任务后才递增p。以下示例:

#include<stdio.h>
int main() {
    int a, b;
    a = 19;
    b = 10;


    if (a++ == 19) // 19 == 19. Checks out. // -------------------
        // now that the line in which a++ appreared has
        // finished executing, the post increment comes into play
        // and a becomes 20
        printf("%d\n", a); // 20 is printed 

    if (++b == 10) // 11 != 10. Code inside curly braces of if statement
                   // is not executed
        printf("%d\n", b); // nothing is printed

    // final output at the console
    // 20 is printed
    return 0;
}

因此,在您的情况下,首先将指针p按原样使用并取消引用。只有在该行执行完毕后,++才会起作用,并增加存储在p中的地址。