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++) 是左值,这是合法的.