|
![]() | 作者: 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号