黑马程序员技术交流社区
标题:
求解答
[打印本页]
作者:
الغيوم_ا
时间:
2014-7-13 23:19
标题:
求解答
问题:使用我的编译器,下面的代码int i=7; printf("%d\n", i++ * i++); 返回49?不管按什么顺序计算, 难道不该打印出56吗? 输出i的值是多少?
作者:
温天恩
时间:
2014-7-13 23:52
花了二十分钟查资料,终于找到了。
书上这么写的:
如有以下表达式:
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页
作者:
可心来了
时间:
2014-7-14 00:21
楼上好给力啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2