精華區beta C_and_CPP 關於我們 聯絡資訊
我推oohay 老實說,這並不是很難懂的東西, 他又不是考 a++ + ++a ; 甚至更難釐清的組合 原PO的題目一次只用到一個 ++ 本來就是依照這個特性, K&R原意是能讓人充分組合運用,可以增加效能和簡潔性。 至於你說 公司/學校 為何出這種東西來面試, 無非就是為了測試你真的懂了多少?你能不能注意到細節, 你是不是對這個語言具備了研究的熱誠? 不然你說你對C很有興趣卻不想花時間研究!? 能注意到細節是好事,只有加分的作用, 寫程式貴在細心分析問題,具備coding的熱誠, 真的在寫的時候,難道老闆會要求叫你要寫的很藝術嗎? 我想並不會吧,我想這才是為何有這種題目存在 for(i=0;i<MAX;) if( a[i++] == res1 || a[i++] == res2 || a[i++] == res3 || a[i++] == res4 ) { ; }//類似這樣用是很好用啦.. K&R 2e P.105 void strcpy(..) { while((*s = *t) != '\0'){ s++; t++; } } void strcpy(..) { while((*s++ = *t++) != '\0' ) ; } ※ 引述《StubbornLin (Victor)》之銘言: : ※ 引述《oohay (五黑)》之銘言: : : 再問,這種想法不就幾乎無視了postfix ++的語意了嗎? : : postfix ++指明的意思是在運算元取值了之後,加ㄧ再把值存回原位址. : : 而 z++ + z 這樣的句子,編譯的時候有可能依不同的順序做出不同的機器碼嗎? : : 可是,難道C不是以statement為單位進行指令嗎? : : 如果你要考慮第二個z是在第一個z加ㄧ之前或是加ㄧ之後做, : : 那這個statement就不是程式執行的基本單位了. : 我覺得那不是重點吧? 為什麼好好一段簡單的程式碼 : 要刻意寫一個靠語言隱諱的細節來決定運算結果? : 因為不是所有語言都是這樣子,在寫程式碼時為何不盡量以簡單為主 : 以大多數語言的共通、顯著的特性來寫? : 並不是所有人都精通C/Java等等,知道這樣的特性和細節 : 包括我在內,對不起~ 我對於規格書老實說沒什麼興趣 : 因為規格書真的很無趣 : 我認為程式語言是工具,工具是拿來解決問題的 : 如果鑽研這樣的特性對解決問題沒有什麼幫助 : 那請問這樣的程式碼意義在哪裡? : 可以這樣寫阿,問題是好處在哪裡? : 因為知道語言的細節,所以刻意這樣寫? : 如果我考出來,也沒說這是哪種語言 : (很多考題都寫程式碼片段也不說是那種語言也很常見的= =|) : 你怎麼知道他的結果? : 當這樣寫法壞處比好處多時,我們是否應該想盡量避免這樣的寫法? : 像你這樣說,那goto為什麼不能用? 不用goto不是無視goto的語意嗎? : 當兩個選擇之間,明明有一個明顯優於另一種 : 我不懂選比較爛的那個理由到底在哪裡 : a = z++ + z; : a = z + z; ++z; : 下面這樣不是很好嗎? 一目了然,不管java和C/C++來跑都一樣 : 使用上面那個的理由在哪裡? : 如果你C/C++/Java一直都混著寫,你怎麼能保證你知道並記清楚這樣的細節? : 你是不是還得翻書還是問人確認這樣的結果? : 你浪費了其它人的寶貴時間在這種無關緊要的細節上不罪該萬死嗎? : 我一直都這樣覺得,好的程式是好在架構,除非是某些瓶頸非這樣寫不可 : 否則在這樣無關緊要的簡單程式碼增加閱讀上的困難根本就沒必要 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.169.84.102 ※ 編輯: ccu5566 來自: 218.169.84.102 (02/03 23:17)
ccu5566:看到106 strcpy完是一個簡單的例子 02/03 23:21
csihcs:第一個例子會 index out of bound,然後程式就爆炸了 02/03 23:36
StubbornLin:喔喔 我一直在想要怎樣用簡單的碼改寫 02/03 23:40
StubbornLin:沒注意到還有暴炸問題 XD 02/03 23:41
ccu5566:預防程式爆炸是基本 當然你可以在for裡面卡或是宣告時卡 02/03 23:54
ccu5566:不好意思害到3樓 表達能力不太好,因為那不是我強調的部分 02/04 00:14
ccu5566:這邊MAX指存取範圍不是陣列大小 02/04 00:17