[問題] 指標傳入副函式做malloc 一問

看板C_and_CPP作者 (nikeasyanzi)時間12年前 (2012/11/19 11:45), 編輯推噓1(1015)
留言16則, 7人參與, 最新討論串1/1
int set_val(char *a){ a=(char *)malloc(sizeof(char)*4); *a='x'; *(a+1)='y'; printf("%s\n",a); return 0; } int main(){ char * a=NULL; set_val(a); printf("%s",a); return 0; } 各位版友大家好 有個問題想請問各位先進 我使用VC2010 我本來預期兩個printf都會一樣 都是印出xy 1.但上列程式 第一個printf(在set_value裡) 印出xy 但第二個printf 卻是NULL(在mail裡) why?? malloc 的記憶體是放在heap 應該不是被收回去啊! 那怎麼會是NULL 何況我傳指標不就算是call by reference ? 這是新手十戒裡的嗎? 囧 2.另外我知道這樣寫法好像不大好 正確地的作法 是在main()裡就malloc 這樣程式就沒問題 這樣的做法是不是也才能符合 "malloc 和free最好在同一個函式內"的說法? 無論如何 先謝謝大家!! -- CyberPanel 5000CP 換 NT.500 http://myurl.com.tw/05bd EmailCash 5000e 換 NT.500 http://myurl.com.tw/rgdq -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.205.201

11/19 19:49, , 1F
新手十誡 最後一誡? 是嗎?? 囧
11/19 19:49, 1F

11/19 19:51, , 2F
但我看了 最後的圖解 還是不大懂欸! 資質太差>"<
11/19 19:51, 2F

11/19 19:55, , 3F
傳進去的是沒初始化的char *a的值
11/19 19:55, 3F

11/19 19:56, , 4F
為啥解決方法是用雙重指標 改指標所在的位址?
11/19 19:56, 4F

11/19 19:56, , 5F
這樣寫要用兩個*
11/19 19:56, 5F

11/19 19:56, , 6F
這樣傳進去的不是a本身,是a的值,裡面改不到
11/19 19:56, 6F

11/19 19:57, , 7F
c不能傳reference,所以要傳a的址進去
11/19 19:57, 7F

11/19 19:58, , 8F
傳指標不是call by reference,是call by value
11/19 19:58, 8F

11/19 19:59, , 9F
那個value是位址,pointer是存位址的變數,不是reference
11/19 19:59, 9F

11/19 20:19, , 10F
11/19 20:19, 10F

11/19 20:20, , 11F
http://ideone.com/dpasoO 印出來不是b的原因一樣
11/19 20:20, 11F

11/19 20:37, , 12F
11/19 20:37, 12F

11/19 20:40, , 13F
reference是指*&a嗎
11/19 20:40, 13F

11/21 13:58, , 14F
reference 是指 &
11/21 13:58, 14F

11/21 13:58, , 15F
感謝樓上幾位版友回文!! 小弟懂了! Orz
11/21 13:58, 15F

11/25 03:14, , 16F
第五誡吧!
11/25 03:14, 16F
文章代碼(AID): #1GgXlbcS (C_and_CPP)