为什么这段代码输出3

SIF*_*IFE 0 c

可能重复:
任何人都可以解释这些未定义的行为(i = i ++ + ++ i,i = i ++等...)

我发现这段代码,最初在这里:

#include <stdio.h>

int main()
    {
    int p = 0;
    p = p++ + ++p;
    printf("p=%d\n", p);

}
Run Code Online (Sandbox Code Playgroud)

我猜测输出将是2,但是当我编译代码并执行它时,输出为3,为什么?

P.P*_*.P. 6

p = p++ + ++p;
Run Code Online (Sandbox Code Playgroud)

是未定义的行为.阅读序列点.