回 帖 发 新 帖 刷新版面

主题:自加自减运算

先说TC,在TC中,printf()外可以这么理解: 
int i=5,p; 
p=(i++)+(i++)+(i++); 
可以当成: 
int i=5,p; 
p=i+i+i; 
i++;i++;i++; 
而 
int i=5,p; 
p=(++i)+(++i)+(++i); 
可以当成: 
int i=5,p; 
++i;++i:++i; 
p=i+i+i; 
也就是说,可以把式子中所有的i++和++i都改成i,然后,把++i放在本条语句之前执行,把i++放到本条语句执行完之后再执行。 
所以,可以知道int i=5,p; 
p=(i++)+(++i)+(i++)+(i++); 
相当于++i;p=i+i+i+i;i++;i++;i++; 

回复列表 (共1个回复)

沙发

如果写出p=(i++)+(i++)+(i++); 这样的语句,还是换本C语言的书看吧。
C语言虽然明确规定了 运算符的优先级 和 结合方向,但没有规定求值顺序。现代的处理器一般能同时执行好几条指令,因此很难确定先计算哪个i++,甚至都是同事执行的。
建议您在google上搜这2个概念:序列点和副作用。

我来回复

您尚未登录,请登录后再回复。点此登录或注册