[問題] 問一題面試可能會考的考題

看板C_and_CPP作者 (我操你姐的國家暴力)時間15年前 (2010/01/14 13:48), 編輯推噓14(14026)
留言40則, 18人參與, 最新討論串1/6 (看更多)
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)

01/14 21:57, , 1F
是啊, ptr是拿到新空間啦, 但是沒有成功留給main裡的
01/14 21:57, 1F

01/14 21:57, , 2F
str啊; 請去查一下pass by value與pass by reference.
01/14 21:57, 2F

01/14 21:59, , 3F
可是他是 call by pointer 所以應該有留給main 不是嗎
01/14 21:59, 3F

01/14 22:01, , 4F
掛debug看看str與ptr的address/變化如何:)
01/14 22:01, 4F

01/14 22:02, , 5F
話說, call by pointer又是哪裡出來的名詞啊....@_@"
01/14 22:02, 5F

01/14 22:02, , 6F
沒有 call by pointer 這種東西, 都是 call by value
01/14 22:02, 6F

01/14 22:03, , 7F
竟然跟樓上同時 >/////<
01/14 22:03, 7F

01/14 22:04, , 8F
XD 我也是覺得call by address已經夠亂了, 現在又出來一
01/14 22:04, 8F

01/14 22:04, , 9F
種說法叫cal by pointer, 真是....(暈)....orz
01/14 22:04, 9F

01/14 22:06, , 10F
我說的 call by pointer 就是 call by address 啦 sry
01/14 22:06, 10F

01/14 22:09, , 11F
你先舉出一個利用你所謂的call by address,然後確定
01/14 22:09, 11F

01/14 22:09, , 12F
可正常執行的例子之後再說
01/14 22:09, 12F

01/14 22:13, , 13F
OK 我好像懂了 關鍵就在 call by address
01/14 22:13, 13F

01/14 22:13, , 14F
骨子裡還是 call by value 只是 data type 是 address
01/14 22:13, 14F

01/14 23:06, , 15F
拜託 call by address/pointer 都是以訛傳訛的錯誤名詞
01/14 23:06, 15F

01/14 23:06, , 16F
只有call by value / reference兩種而已
01/14 23:06, 16F

01/14 23:31, , 17F
我怎麼好像在PL課本上面看到 call by address -.-
01/14 23:31, 17F

01/14 23:39, , 18F
call by lanpa
01/14 23:39, 18F

01/14 23:51, , 19F
我大學老師也是教call by address
01/14 23:51, 19F

01/14 23:53, , 20F
可以問一下這是啥場合的面試嗎?
01/14 23:53, 20F

01/15 00:07, , 21F
這是call by value吧
01/15 00:07, 21F

01/15 00:09, , 22F
by address 跟by reference好像是刻意劃分C跟C++
01/15 00:09, 22F

01/15 01:35, , 23F
雖然型態是pointer, 但這是call by value
01/15 01:35, 23F

01/15 01:40, , 24F
而且還會造成記憶體遺失...XD
01/15 01:40, 24F

01/15 02:11, , 25F
C只有call by value 只要記對的就好 其他都是錯的
01/15 02:11, 25F

01/15 03:50, , 26F
01/15 03:50, 26F

01/15 09:26, , 27F
應該是求職面試.... 我好像也有遇過一樣的問題 (小聲)
01/15 09:26, 27F

01/15 09:50, , 28F
沒有什麼錯不錯的問題吧
01/15 09:50, 28F

01/15 09:50, , 29F
講法上的問題
01/15 09:50, 29F

01/15 10:41, , 30F
喜歡用call by pointer講也可以呀
01/15 10:41, 30F

01/15 10:41, , 31F
台灣人自創的講法 老外聽不懂滴
01/15 10:41, 31F

01/15 10:42, , 32F
你在函式內要改變的是pointer本身的值,而不是point所指
01/15 10:42, 32F

01/15 10:42, , 33F
向的變數的值,就要傳指向這個pointer的pointer進去
01/15 10:42, 33F

01/15 10:43, , 34F
嗯嗯 純粹只是說原PO會有這個問題並非名詞上的錯誤
01/15 10:43, 34F

01/15 10:44, , 35F
而是對pointer的了解有問題
01/15 10:44, 35F

01/15 10:44, , 36F
我個人是覺得一律用call by value來理解比較簡單
01/15 10:44, 36F

01/15 10:45, , 37F
至於call by address是否為台灣人自創我不清楚
01/15 10:45, 37F

01/15 10:45, , 38F
聖經本都說C只有call by value了
01/15 10:45, 38F

01/15 10:46, , 39F
台灣人寫的書自創用語 反而造成學生多餘負擔
01/15 10:46, 39F

01/15 10:55, , 40F
只能推樓上了
01/15 10:55, 40F
文章代碼(AID): #1BJo2Obm (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BJo2Obm (C_and_CPP)