作者ccu5566 (中正56)
看板C_and_CPP
標題Re: [問題] 面試遇到的一個問題
時間Sun Feb 3 23:04:51 2008
我推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