C语言中++ val ++和++*p ++的解释

und*_*ack 6 c increment operator-precedence

int val = 5;

printf("%d",++val++); //gives compilation error : '++' needs l-value

int *p = &val;
printf("%d",++*p++); //no error
Run Code Online (Sandbox Code Playgroud)

有人可以解释这2个案例吗?谢谢.

sep*_*p2k 27

++val++是一样的++(val++).由于结果val++不是左值,这是非法的.正如Stephen Canon指出的那样,如果结果val++是左值,++(val++)那么将是未定义的行为,因为++s 之间没有序列点.

++*p++是一样的++(*(p++)).由于结果*(p++) 左值,这是合法的.