看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 這段code只有make_tree,traverse_tree,load這三個函數有修改過,如果有錯一定 是在這三個裡面 這段code只有在make_tree函數的部分有問題,就是我想將head這個全域變數 傳入function,但是好像都會變成將位置以值的形式複製給區域變數, 結果函數處理到的都是區域變數,不果我還是不懂為何將&head傳入,會沒辦法 根據位置找到全域變數,並對全域變數做處理??? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/5q10f 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.183.32
shadow0326:我沒有很完整看完code 不過111行是將區域變數t_data的 03/30 15:30
shadow0326:位址賦予給t_head, 這是你要的效果嗎? 03/30 15:30
shadow0326:t_data是一個指標,但這個指標自己的位址仍只是在local 03/30 15:31
shadow0326:scope有效噢 03/30 15:31
我發現把111行的code改成*t_head=t_data就會對了,不過我還是不懂, 把*t_head=t_data寫成t_head=&t_data為什麼會不對,*和&不是會互消嗎?? ※ 編輯: lueichun 來自: 111.251.183.32 (03/30 18:50)
shadow0326:提示是一個指標自己本身也有位址, 以及它的生命週期 03/30 19:11
shadow0326:其實畫個圖應該就了解了 可是我懶的畫而且要下班了(酸 03/30 19:12
可以畫個圖解釋一下嗎??我一直以為是將t_data的位置指定給head, 就可以讓head指向data,我畫的圖會是這樣: t_head---->null, data的位置指定給head: t_head---->t_data(指標)---->t_data對應的空間 因為我是將t_head當作tree root的address,而t_data是tree root,而且他是個指標, 所以將t_data的address設給t_head,寫成*t_head=t_data感覺像是直接把tree_root assign成t_data,我知道這樣寫可以,但是覺得這樣寫很不自然,感覺不像是在處理 指標,而我就算畫圖還是不知道為何不能用前者的作法?? ※ 編輯: lueichun 來自: 111.251.183.32 (03/31 13:24)
jhchou:因為雖然t_head的值是head的位址,但是t_head是local var 03/31 15:50
jhchou:你寫t_head=&t_data只是改變t_head的值,沒有改變head的值 03/31 15:54
jhchou:你可以先想想假如有個函式長這樣void f(int* x){ x=nul;} 03/31 15:58
jhchou:然後main(){ int a; f(&a); } a會不會有變化 03/31 16:00