有感于高考第三题
我做了一些测试来帮助自己理解
我写了一段程式
int d=4; d=d++;
printf ("%d", d);
结果印出结果是4 求解
请问为何+1被吃掉了?因为我printf是写在下一段
作者:
szk (无)
2016-07-15 23:32:00d=4后做
d++他先记住d下一行才记住运算d+1 ++d他先运算d+1
作者: wencheng1230 (Nick) 2016-07-16 00:19:00
++d才是5 这观念算基础唷
++d 跟 d++的差别我了解 我想问并不是上面说的那些...
作者:
rusynth (ru + synth)
2016-07-16 00:39:00因为你用了等号,而不是直接++。d=d++,d会先等于d,然后才加一,所以你后面的printf显示的是4d=c++,d会等于4,然后才执行c++,c会变成5
r大可是我的+1不见了 不管怎么隔开d再印出 d都是4
GCC complier 执行结果是5,你要不要检查一下
我用上面的是4耶 怪了= =抱歉不会缩网址真奇怪用gcc是5没错 谢谢s大为何会不一样呢?= =
作者:
jachin (火腿哥)
2016-07-16 01:22:00我觉得这就是撰写程式的正交性问题。问题应该是出在内存配置先后原因。你的d=X;和d++;看谁后写入内存,就是最后答案。就像原题目的那种写法,决定于哪个变量先后被assign。
给你这两个网页做参考 goo.gl/TbpBlFgoo.gl/6ioHik 真的是有讨论就会学到东西
作者:
szk (无)
2016-07-16 05:36:00要先分别d++和d=d++的差别我一开始没仔细看,还以为是d=4的关系
作者:
jachin (火腿哥)
2016-07-16 07:53:00哈哈,我笑了→“ 国内最容易让人重新注意到这类问题的主要乱源,常常是不懂又乱出考题的学校老师和公司的面试官 (虽然我相信有很小一部份是真的故意出来考人)。”我觉得用thread来理解很好,依最佳化的方式和平行存取内存,造成不同编译器,产生不同结果
作者:
wt5566 (commend & comment)
2016-07-16 09:43:00这出题老师很明显就是不写CODE.又没经过考试洗礼,不知考点很明显也和现代IT产业脱离,会写的要担心考卷会不会被乱改
针对calling convention与sequence point两点提出释疑了
作者:
szk (无)
2016-07-16 11:12:00不能同意wt大更多了...
作者:
nculeo (力欧)
2016-07-16 11:41:00正解
了解了 谢谢s大的网页解释的很清楚 也谢谢j大及各位没想到自己给自己乱出题目 又得到新知识了XD(虽然可能没啥用处)y
作者:
rusynth (ru + synth)
2016-07-16 12:17:00挺搞笑的,VS编译执行结果,第一个显示5,第二个显示 5 4同样d=d++,出来的值不同,所以我都不用++,没有安全感我发觉变量的不同影响了结果d=4;d=d++; 两边都是d的话,结果出来是4上面写错了...d=4;d=d++; 出来结果是5c=4;d=c++; 两边不同变量,出来的结果d=4也就是说 a=4;a=a++; b=4;b=b++; c=4;c=c++ 这些都是5a=4;b=a++; c=4;d=c++; e=4;f=e++ 这些结果都是4
r大可以看看s大有关sequence point的网页 你的重点放错d=d++这种写法 会因为compiler不同而不同 同高考第三题但原因是不同的