看板Programming
标 题Re: [问题] i++,++i
发信站SayYA 资讯站 (Wed Nov 26 14:26:31 2008)
转信站ptt!news.ntu!news.ncu!News.Math.NCTU!SayYa
※ 引述《[email protected] (淡淡的蓝)》之铭言:
> 程式如下
> main()
> {
> int i=5,j=5,p,q;
> p=(i++)+(i++)+(i++)+(++i)+(++i);
> q=(++j)+(++j)+(++j));
> printf("%d\n,%d\n,%d\n,%d\n",p,q,i,j); //28,22,10,8
> }
> 注解是印出来的值,如果是
> p=(i++)+(i++)+(i++); //p的值是 15
> ↑这个可以理解,可用这个想法来想++i,却解不出上面的答案
> 这和compile有关吗? 我用vc6跑的.
好像每年都会看到这种问题文章,而且每次回应时候都会把
这类问题鞭策过才可以。
这类写法老实说 c 里面应该没有明确规范解释的顺序方式,
所以就留给各家 compiler 自行决定。
我想学 c 的人把 i++ 与 ++i 的差异弄清楚就可以了,实在
没有必要写这种奇怪的程式码。
另外还看过这种:
int num;
printf("%d\n", num + (num = 100));
看完我感觉我很想打这个写 code 的人。
以外印象中这类 code 老实说也感觉不是很明确:
(*ptr++) ? (*ptr++) : 0
myfunc1(i++) + myfunc2(i++)
多年的讨论,我想最後都会有如下的结果回应:
1. 若是是学校 homework,表示授课教师可能....(自行猜想)
2. 若是在工作地方写这程式会被主管鞭策一顿
若你真的对你用的 compiler 解释方式有兴趣,建议把程式码转成
assembly language 後,看 asm code 会知道比较细部流程。
--
如果真的爱一个作业系统 怎能不害怕不再能使用它 而我们必须接受现实
於是长大了 寂寞就是没有了机会再用它 比没有电脑还要寂寞
而那些点亮我们生命的作业系统 就彷佛电影中发生在暹逻的爱情故事
即使短暂使用也会刻骨铭心
To all the Linux that bring us to kernel.
--
※ Origin: SayYA 资讯站 <bbs.sayya.org>
◆ From: kendlee.sayya.org
1F:推 chrisdar:*ptr++ = (*ptr)++ or *(ptr++) 应该是後 123.195.80.158 11/26 19:44