[討論] 程式設計師面試寶典的面試題目
裡頭提到很多公司考的題目, 我認為拿來當題庫練習還不錯,
全部搞懂的話應該可以應付大多數公司的筆試。
討論其中一題:
char *a(){
char ca[]="hello";
return ch;
}
這樣有什麼問題。
大概就是: 放在 stack 裡, 在 return 時, stack 會被清掉,
所以無法預期 c[] 的值還會是 "hello"。
書中提出可用 char *c="hello"; 改善。
書中有解釋, 我覺得很有趣, 也翻了一下 The C Programming Language,
不過沒看到說明這一差異, 可能我沒找到。
想知道書上解釋的原因, 轉成組合語言就清楚多了。
由於程式碼較長, 分享在 blog 上。
http://descent-incoming.blogspot.com/2011/12/c-runtime-array-vs-pointer.html
--
死, 是生命最偉大的發明。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.43.245.118
推
12/09 18:57, , 1F
12/09 18:57, 1F
請問風險在於哪裡呢?
書中解法是傳回 const char*
const char* a()
{
char *cp="hello";
return cp;
}
※ 編輯: descent 來自: 115.43.245.118 (12/09 20:16)
推
12/09 20:35, , 2F
12/09 20:35, 2F
→
12/09 20:35, , 3F
12/09 20:35, 3F
推
12/09 20:38, , 4F
12/09 20:38, 4F
→
12/09 20:40, , 5F
12/09 20:40, 5F
→
12/09 20:54, , 6F
12/09 20:54, 6F
→
12/09 20:55, , 7F
12/09 20:55, 7F
→
12/09 20:56, , 8F
12/09 20:56, 8F
→
12/09 22:17, , 9F
12/09 22:17, 9F
打錯, 已經修正。
※ 編輯: descent 來自: 115.43.245.118 (12/09 22:57)
推
12/09 23:20, , 10F
12/09 23:20, 10F
→
12/09 23:20, , 11F
12/09 23:20, 11F
推
12/10 00:18, , 12F
12/10 00:18, 12F
→
12/10 00:24, , 13F
12/10 00:24, 13F
→
12/10 01:42, , 14F
12/10 01:42, 14F
推
12/10 09:13, , 15F
12/10 09:13, 15F
→
12/12 07:36, , 16F
12/12 07:36, 16F
推
12/13 20:59, , 17F
12/13 20:59, 17F
Soft_Job 近期熱門文章
PTT職涯區 即時熱門文章