[问题] 程式语言

楼主: lexus7310 (Fox)   2016-07-15 23:22:57
有感于高考第三题
我做了一些测试来帮助自己理解
我写了一段程式
int d=4; d=d++;
printf ("%d", d);
结果印出结果是4 求解
作者: viral77321 (异戊二烯)   2016-07-15 23:28:00
就只是d++ 跟++d的差异
楼主: lexus7310 (Fox)   2016-07-15 23:31:00
请问为何+1被吃掉了?因为我printf是写在下一段
作者: szk (无)   2016-07-15 23:32:00
d=4后做
作者: viral77321 (异戊二烯)   2016-07-15 23:43:00
d++他先记住d下一行才记住运算d+1 ++d他先运算d+1
作者: Juniorlin01 (虛擬)   2016-07-15 23:52:00
前置式跟后置式...很基本的观念要会
作者: wencheng1230 (Nick)   2016-07-16 00:19:00
++d才是5 这观念算基础唷
楼主: lexus7310 (Fox)   2016-07-16 00:30:00
++d 跟 d++的差别我了解 我想问并不是上面说的那些...
作者: rusynth (ru + synth)   2016-07-16 00:39:00
因为你用了等号,而不是直接++。d=d++,d会先等于d,然后才加一,所以你后面的printf显示的是4d=c++,d会等于4,然后才执行c++,c会变成5
楼主: lexus7310 (Fox)   2016-07-16 00:46:00
r大可是我的+1不见了 不管怎么隔开d再印出 d都是4
作者: Juniorlin01 (虛擬)   2016-07-16 00:46:00
一样是前置式后置式的观念
作者: s2327259 (史东)   2016-07-16 00:48:00
GCC complier 执行结果是5,你要不要检查一下
楼主: lexus7310 (Fox)   2016-07-16 00:52:00
我用上面的是4耶 怪了= =抱歉不会缩网址真奇怪用gcc是5没错 谢谢s大为何会不一样呢?= =
作者: jachin (火腿哥)   2016-07-16 01:22:00
我觉得这就是撰写程式的正交性问题。问题应该是出在内存配置先后原因。你的d=X;和d++;看谁后写入内存,就是最后答案。就像原题目的那种写法,决定于哪个变量先后被assign。
作者: s2327259 (史东)   2016-07-16 01:45:00
给你这两个网页做参考 goo.gl/TbpBlFgoo.gl/6ioHik 真的是有讨论就会学到东西
作者: Googleby2 (向前迈进)   2016-07-16 01:49:00
看到”法律莲“这个关键字
作者: s2327259 (史东)   2016-07-16 01:50:00
太晚了,我也只是略为看过:P 明天醒来再仔细看
作者: 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产业脱离,会写的要担心考卷会不会被乱改
作者: s2327259 (史东)   2016-07-16 10:22:00
针对calling convention与sequence point两点提出释疑了
作者: szk (无)   2016-07-16 11:12:00
不能同意wt大更多了...
作者: nculeo (力欧)   2016-07-16 11:41:00
正解
楼主: lexus7310 (Fox)   2016-07-16 11:46: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
楼主: lexus7310 (Fox)   2016-07-16 12:57:00
r大可以看看s大有关sequence point的网页 你的重点放错d=d++这种写法 会因为compiler不同而不同 同高考第三题但原因是不同的

Links booklink

Contact Us: admin [ a t ] ucptt.com