论坛: 编程破解 标题: C++之++(286能否来说说) 复制本贴地址    
作者: windflower [windflower]    论坛用户   登录
  #include<stdio>
main()
{int i=3;
printf("%d%d",i,(i++)+(i++)+(i++));
}
6 12

main()
{int i=3,j=0;
j=(i++)+(i++)+(i++)
printf("%d%d",i,j);
}
6 18
为什么这两个表达式结果不同?细述之请。

地主 发表时间: 08/17 14:19

回复: tommy_he [tommy_he]   版主   登录
你的6是怎么来的啊!简直是,不会吧!?
又没有计算就输出6,应该是3吧?

B1层 发表时间: 08/17 14:30

回复: benww [benww]   论坛用户   登录
这个结果是像是随编译系统的不同而改变的吧?TC是6,18~~
不知道有没有说错~~

B2层 发表时间: 08/17 16:11

回复: spino [spino]   论坛用户   登录
我的也是啊,不知为什么在TC编译就是6,12。而在C++编译就是3,9。

B3层 发表时间: 08/17 16:39

回复: windflower [windflower]   论坛用户   登录
我申明是在TC中,但是为什么赋值给J,J成了18,而直接输出三个相加却变成了12,哎,这本是没意义的东西,知道了结果就是了,这只不过是编译程序的算法不同而已,管它呢。知道就是了。难道这两个表达式扫描有什么大不同吗、

B4层 发表时间: 08/18 00:08

回复: 286 [unique]   版主   登录
KAO,老弟是在为难我吧?
我一向对这些迷之又迷.
不过,做这类题始终记住一点:
在同一行语句中,++i是先加再处理,i++是先处理再加.

#include<stdio.h>
main()
{
int i=3,j=0,k=3;
         j=(i++)+(i++)+(i++);
printf("%d  %d",j,(k++)+(k++)+(k++));
}
结果为:9 12
[j=3+3+3    12=3+4+5]

还有,有些系统对参数编译由左到右,有些系统编译从右到左。



[此贴被 286(unique) 在 08月18日11时25分 编辑过]

B5层 发表时间: 08/18 10:50

回复: kenter1643 [kenter1643]   论坛用户   登录
《1》printf("%d%d",i,(i++)+(i++)+(i++));我想是从右算起,自加三次便成了6输出。
《2》我用winTC编译的结果是6,9。j不是18啊~~是不是你看错了。


B6层 发表时间: 08/20 23:50

回复: zzzaaa [zzzaaa]   论坛用户   登录
《1》你的第《1》条想法是对的。。
《2》非常正常,()优先级较高。先++,再求和。。。

stdcall,c,函数参数从右到左入栈
pascal函数参数从左到右入栈


B7层 发表时间: 08/22 11:30

回复: kenter1643 [kenter1643]   论坛用户   登录
你说j=18是对的???为什么我用wintc编译的结果是9??

B8层 发表时间: 08/22 20:17

回复: cyshaoping [cyshaoping]   论坛用户   登录
有人写这种代码吗?

B9层 发表时间: 10/24 20:39

回复: ceo_8008 [ceo_8008]   论坛用户   登录
这种语句不可取・・・

平时应当注意避免

B10层 发表时间: 10/25 00:14

回复: lover_521 [lover_521]   论坛用户   登录
第一个在算的时候是从右到左。所以就是3+3+3=9,i自动加得6。
第二个一样也是6和9。只是在TC中。

B11层 发表时间: 10/25 19:04

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号