高分!!!!有关VC++6.0中自加自减的问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 01:17:19
代码为:
int a=3;
cout<<a<<a++<<endl;
int b=3;
cout<<b++<<b<<endl;
int c=3;
printf("%d,%d",c,c++);
int d=3;
printf("%d,%d",++d,d);

运行结果分别是:43
43
3,3
4,3
问题就是为什么第三行出来的是3,3而不是4,3 根据其他的结果分析VC++函数的求值顺序应该是是从右到左的啊 为什么对c的计算是从左到右而对d的计算是从右到左呢? 很大的困惑 希望有高人给出解释
系统是WINDOWS XP SP2
代码第四行应为cout<<++b<<b<<endl;
笔误

前缀自加和后缀自加是不同的,前缀自加是先自加后使用,比如printf("%d,%d",++d,d);在这里虽然计算时是从右到左,但计算到++d时,电脑是明确的先计算出d的值再使用的,而后缀自加就使用了再加的,因此 printf("%d,%d",c,c++); 在编译的结果后printf函数里面使用的都是一个值就是3,因为先使用吗,这是编译器处理的结果。你只能问当初设计这个编译器的人。
(为什么对c的计算是从左到右)这话问错了,并不是从左到右。不信你用这个试试,
printf("%d,%d,%d,%d,%d",c,c++,c++,c++,c++);
输出结果都是一样的3,3,3,3,3
编译器的事,自己编程注意一点就是了

printf("%d,%d",c,c++);
printf函数是按照指定字符串给出的格式格式化输出数据的,所以自左向右输出。
这个问题的关键是:C++重载了<<运算符,在cout<<a<<a++<<endl;
并且operator<<返回ostream&对象,
先调用operator<<(a++),在调用operator<<(a),至于为什么a++以后在输出a的值变为3,我想应该是在调用过程中,编译器先把a放到栈当中,然后在operator<<(a++)完成之后a的值仍未原来的3

第一个结果是43我还真的不是很明白。
对于第三个,其实这个是和编译器相关的,
++在后面一般理解为先执行后计算,
++在前面一般理解为先计算后执行的。

不过在实际编程中不推荐这样写,会造成理解困难。

很简单的解释,cout读参数是从右往左读,而printf是从左往右读

主要是因为cout<<是从右到左运算,也就是说
第一行本来是先计算a++;但是++运算时先使用后加,那么后面一个的输出就是3
而前面的a实际上是++后的结果;
第二行中同理,cout<<++b&