可能重复:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)左值问题
#include<stdio.h>
int main()
{
char a[]="Hello";
char *p=a;
while(*p)
++*p++; //Statement 2
printf("%s",a);
int x=10;
++x++; //Statement 1
return 0;
}
当我编译此代码我在声明1,这我可以理解得到的左值所需错误。即使我打算做同样的事情,该声明2如何不会产生错误?有人可以放光吗?
p在序列点之间被修改两次,所以这是未定义的行为。 – Lundin
@Lundin不,它不是。 '++ * p ++'是'++(*(p ++))','p'只修改一次,没有UB。 –
好吧,有一个问题:为什么你想写这样的代码,没有括号?使用正确的括号和行为将是可预测的+可读。 – anishsane