怀疑在printf中使用*++ p

Div*_*vij 2 c programming-languages

int main(){
    int a[3]={1,10,20};
    int *p=a;
    printf("%d %d " ,*++p,*p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在gcc编译器上,上面代码的输出是10 1.

我知道*++ p递增p并取消引用新值.但是由于p已递增,为什么*p返回1而不是10?

orl*_*rlp 7

在计算什么顺序函数参数表达式时,这是未指定的行为.有些编译器可能使用从左到右,有些从右到左,有些可能会根据优化情况执行不同的评估顺序.所以在你的情况下*p得到评估之前*++p导致你的"怪异输出".