C++程序问题,各路神仙求解

[复制链接]
查看11 | 回复4 | 2012-12-31 12:43:37 | 显示全部楼层 |阅读模式
这个问题没有意义.因为 "C++语言规范并未规定函数的参数计算顺序, 由编译器自行决定".也就是说, 你的第一个printf中, 编译器有可能先计算a = 2*b, 也有可能先计算b =a+b.所以不同编译器答案会不一样, 同样的编译器优化级别不同也可能不一样.之所以这么做, 是考虑到给予编译器足够的优化空间, 以提升程序效率.像是Java会严格规定参数的计算顺序, 但是大部分语言包括C/C++都不会.应此像这种一句话里面同一个变量多次改变的语句在C++中不要写, 计算结果可能会很奇怪.....
回复

使用道具 举报

千问 | 2012-12-31 12:43:37 | 显示全部楼层
你好,是这样的printf("%d,%d\n",b=a+b,a=2*b);//这个是从左向右执行的(你的编译器是这样的)不同编译器结果不一样先执行的是a=2*b 结果为0再计算b=a+b这样结果依然是0所以是 00printf("%d, \n",b=a+b);printf(“%d,\n”,a=2*b);这个就简单了 b...
回复

使用道具 举报

千问 | 2012-12-31 12:43:37 | 显示全部楼层
C语言函数传参的顺序是从右到左,所以printf("%d,%d\n",b=a+b,a=2*b);先执行的是a=2*b,再执行的是b=a+b...
回复

使用道具 举报

千问 | 2012-12-31 12:43:37 | 显示全部楼层
你要知道,C语言中编译是从右向左的,第一种情况,用明白一点的话讲就是:编译器先计算的是a=2*b=0,此时a和b的值都为0,然后编译器再算b=a+b=0;
而第二种情况,编译器先计算的是b=a+b=1,此时a的值是1,b的值是2,然后计算的是a=2*b=2;...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行