int val = 5; printf("%d",++val++); //gives compilation error : '++' needs l-value int *p = &val; printf("%d",++*p++); //no error
有人可以解释这2个案例吗?谢谢.
解决方法
val与(val)相同.由于val的结果不是左值,这是非法的.正如Stephen Canon指出的那样,如果val的结果是左值,则(val)将是未定义的行为,因为s之间没有序列点.
* p与(*(p))相同.由于*(p)的结果是左值,这是合法的.