A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© الغيوم_ا 中级黑马   /  2014-7-13 23:19  /  1017 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题:使用我的编译器,下面的代码int i=7; printf("%d\n", i++ * i++); 返回49?不管按什么顺序计算, 难道不该打印出56吗? 输出i的值是多少?

2 个回复

倒序浏览
花了二十分钟查资料,终于找到了。
书上这么写的:
如有以下表达式:
i = 3
(i++)+(i++)+(i++)
表达式的值是多少呢?有的系统按照左结合性,先求第一个括号内的运算,再求第二个括号内的运算,最后求第三个括号内的运算,该表达式也就相当于 3+4+5;而另一些系统(如 Turbo C和MS C)把3作为表达式中所有i的值,因此三个i相加得到9。
为了避免这种歧义性,应该用这种方法实现:
a = i++;
b = i++;
c = i++;
d = a+b+c;
执行以上语句就消除了程序的二义性。
对于你的情况,应该是上述中的第二种,系统把表达式中的i当做同一个值来进行运算了。
你可以这样做:
int a = i++;
int b =i++;
printf("%d\n";a*b);
以此来的到你想要的结果。
详细内容见《C程序设计》第三版 谭浩强 著 第58页
回复 使用道具 举报 1 0
楼上好给力啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马