[問題] 將全域變數傳入函數

看板C_and_CPP作者 (no anonymous)時間12年前 (2012/03/30 15:19), 編輯推噓1(109)
留言10則, 2人參與, 最新討論串1/1
開發平台(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

03/30 15:30, , 1F
我沒有很完整看完code 不過111行是將區域變數t_data的
03/30 15:30, 1F

03/30 15:30, , 2F
位址賦予給t_head, 這是你要的效果嗎?
03/30 15:30, 2F

03/30 15:31, , 3F
t_data是一個指標,但這個指標自己的位址仍只是在local
03/30 15:31, 3F

03/30 15:31, , 4F
scope有效噢
03/30 15:31, 4F
我發現把111行的code改成*t_head=t_data就會對了,不過我還是不懂, 把*t_head=t_data寫成t_head=&t_data為什麼會不對,*和&不是會互消嗎?? ※ 編輯: lueichun 來自: 111.251.183.32 (03/30 18:50)

03/30 19:11, , 5F
提示是一個指標自己本身也有位址, 以及它的生命週期
03/30 19:11, 5F

03/30 19:12, , 6F
其實畫個圖應該就了解了 可是我懶的畫而且要下班了(酸
03/30 19:12, 6F
可以畫個圖解釋一下嗎??我一直以為是將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)

03/31 15:50, , 7F
因為雖然t_head的值是head的位址,但是t_head是local var
03/31 15:50, 7F

03/31 15:54, , 8F
你寫t_head=&t_data只是改變t_head的值,沒有改變head的值
03/31 15:54, 8F

03/31 15:58, , 9F
你可以先想想假如有個函式長這樣void f(int* x){ x=nul;}
03/31 15:58, 9F

03/31 16:00, , 10F
然後main(){ int a; f(&a); } a會不會有變化
03/31 16:00, 10F
文章代碼(AID): #1FTLvqm0 (C_and_CPP)