[問題] 程式語言

作者: 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