鱼C论坛

 找回密码
 立即注册
查看: 3198|回复: 1

[技术交流] q=(++j)+(++j)+(++j);全解一定能让你看懂

[复制链接]
发表于 2012-2-26 15:46:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 gj113669 于 2012-2-26 15:48 编辑

VS2010下编译
#include <stdio.h>
void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);\\我算出来是15,应该等于21啊,这里很不明白,请大家帮帮忙
q=(++j)+(++j)+(++j);\\这里明白,第一个++J是J=5自加1后为6,第二个++J是J为6时再加1等于7,第三个++j 是 j为7时再加1  等于8,跟据编器不同,计算结果有的为22,有的为24,其原因第一种是(++j)+(++j)当计算至第二个时J的值为7,那么编译器认为第一个++J的J的值也为7,前两个++J的值都为7所以7+7等于14,再加上最后一个++J就等于14+8=22;还有一种结果是24的是因为编译器把所有的++J的值都算完,然后取最后一个++J的J的值再把3个J相加就成了8+8+8=24,因为最后个++J的J的值为8;
printf("%d\n%d\n%d\n%d\n",i,j,p,q);
system("pause");
}
P 的值为什么是15
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-26 16:30:46 | 显示全部楼层
P 的值为什么是15?
答:实际上大多数C++系统把5作为表达式中所有的 i 值,因此3个 i 值相加,得到表达式的值为15.在求出整个表达式的值后再实现自加3次,i 的值变为6.

C++标准对表达式求值的顺序,并无统一规定,在求解一般表达式时不会发生歧义,而在求解含++和--运算符时会出现歧义,在不同系统中可能得到不同的结果。大多数专家和专业人员都已充分认识到自增运算符++和自减运算符--的副作用对程序设计的危害性,主张不要过多地依赖使用++和--运算符的技巧,要遵循易于理解的原则。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 21:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表