作者ThirdEmpire (我操你姐的國家暴力)
看板C_and_CPP
標題[問題] 問一題面試可能會考的考題
時間Thu Jan 14 21:48:05 2010
void getMem(char *ptr)
{
ptr = (char*)malloc(100);
}
main()
{
char *str = NULL;
getMem(str);
strcpy(str, "Hello C/C++ programming");
printf("%s\n", str);
}
直接說結果好了
為什麼這樣會當機?
不是已經 call by pointer 了嗎
ptr 應該會得到新 malloc 的那堆空間
==================================
然後比較一下下面這題
void getMem(char **ptr, int num)
{
*ptr = (char*)malloc(200);
}
main()
{
char *str = NULL;
getMem(&str, 200);
strcpy(str, "Hello C/C++ programming");
printf("%s\n", str);
}
為什麼這樣就可以順利印出
Hello blah blah 那串?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.48.229
※ 編輯: ThirdEmpire 來自: 114.25.48.229 (01/14 21:49)
推 VictorTom:是啊, ptr是拿到新空間啦, 但是沒有成功留給main裡的 01/14 21:57
→ VictorTom:str啊; 請去查一下pass by value與pass by reference. 01/14 21:57
→ ThirdEmpire:可是他是 call by pointer 所以應該有留給main 不是嗎 01/14 21:59
推 VictorTom:掛debug看看str與ptr的address/變化如何:) 01/14 22:01
→ VictorTom:話說, call by pointer又是哪裡出來的名詞啊....@_@" 01/14 22:02
推 ledia:沒有 call by pointer 這種東西, 都是 call by value 01/14 22:02
→ ledia:竟然跟樓上同時 >/////< 01/14 22:03
推 VictorTom:XD 我也是覺得call by address已經夠亂了, 現在又出來一 01/14 22:04
→ VictorTom:種說法叫cal by pointer, 真是....(暈)....orz 01/14 22:04
→ ThirdEmpire:我說的 call by pointer 就是 call by address 啦 sry 01/14 22:06
→ fragileness:你先舉出一個利用你所謂的call by address,然後確定 01/14 22:09
→ fragileness:可正常執行的例子之後再說 01/14 22:09
→ ThirdEmpire:OK 我好像懂了 關鍵就在 call by address 01/14 22:13
→ ThirdEmpire:骨子裡還是 call by value 只是 data type 是 address 01/14 22:13
推 chchwy:拜託 call by address/pointer 都是以訛傳訛的錯誤名詞 01/14 23:06
→ chchwy:只有call by value / reference兩種而已 01/14 23:06
→ adxis:我怎麼好像在PL課本上面看到 call by address -.- 01/14 23:31
→ sunneo:call by lanpa 01/14 23:39
推 mine1988:我大學老師也是教call by address 01/14 23:51
→ loveme00835:可以問一下這是啥場合的面試嗎? 01/14 23:53
推 conan77420:這是call by value吧 01/15 00:07
→ conan77420:by address 跟by reference好像是刻意劃分C跟C++ 01/15 00:09
推 yayarice:雖然型態是pointer, 但這是call by value 01/15 01:35
→ hilorrk:而且還會造成記憶體遺失...XD 01/15 01:40
推 softwind:C只有call by value 只要記對的就好 其他都是錯的 01/15 02:11
→ ledia:應該是求職面試.... 我好像也有遇過一樣的問題 (小聲) 01/15 09:26
推 final01:沒有什麼錯不錯的問題吧 01/15 09:50
→ final01:講法上的問題 01/15 09:50
→ mantour:喜歡用call by pointer講也可以呀 01/15 10:41
推 stonehomelaa:台灣人自創的講法 老外聽不懂滴 01/15 10:41
→ mantour:你在函式內要改變的是pointer本身的值,而不是point所指 01/15 10:42
→ mantour:向的變數的值,就要傳指向這個pointer的pointer進去 01/15 10:42
→ mantour:嗯嗯 純粹只是說原PO會有這個問題並非名詞上的錯誤 01/15 10:43
→ mantour:而是對pointer的了解有問題 01/15 10:44
→ mantour:我個人是覺得一律用call by value來理解比較簡單 01/15 10:44
→ mantour:至於call by address是否為台灣人自創我不清楚 01/15 10:45
推 stonehomelaa:聖經本都說C只有call by value了 01/15 10:45
→ stonehomelaa:台灣人寫的書自創用語 反而造成學生多餘負擔 01/15 10:46
推 remmurds:只能推樓上了 01/15 10:55