[問題] pointer和link list的問題

看板C_and_CPP作者 (小天)時間11年前 (2014/08/29 18:25), 11年前編輯推噓1(109)
留言10則, 4人參與, 最新討論串1/1
void pointer(int *p) { p=p+1; } int main() { int a=3; int *b = &a; cout<< *b << endl; pointer(b); cout << *b << endl; } //////以上範例是想測試位址在函數裡的改變是否會傳回主函數,發現不會/////////// void reverse_link(link *head) { link *prev,*temp; prev = temp = NULL; while(head!=NULL) { temp = head; head = head->next; temp->next = prev; prev = temp; } } int main() { reverse_link(head); cout << "顯示反轉鍊表" << endl; show_link(head); } ////以上範例是測試反轉鍊表的意外範例,鍊表沒有反轉,印出的結果發現頭後面的 節點都不見了(這裡省略了部分函數,只留問題)//// 問題:為什麼函數沒有辦法改變位址,可在鍊表中卻會被改動呢?? (抱歉剛剛弄錯範例,以上才是正確想問的,謝謝) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.105 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1409307953.A.4E2.html

08/29 18:27, , 1F
你的測試是錯誤的. 應該要 b = pointer(b);
08/29 18:27, 1F
※ 編輯: kdok123 (140.112.25.105), 08/29/2014 18:47:57

08/29 18:52, , 2F
以上是想要知道函數的運作範圍,所以才都宣告void
08/29 18:52, 2F

08/29 19:19, , 3F
一個觀念: C 語言只有 pass by value, 傳指標進去就只是傳
08/29 19:19, 3F

08/29 19:20, , 4F
指標值進去而已, 所以裡面對傳進來的值本身改動跟外面無關
08/29 19:20, 4F

08/29 19:21, , 5F
對指標指向的東西改動外面才看得到
08/29 19:21, 5F

08/29 19:22, , 6F
簡單比喻: 我複製了把門鑰匙給你, 你進門拿東西我會知道
08/29 19:22, 6F

08/29 19:22, , 7F
但你把門鑰匙撞凹了跟我的門鑰匙卻一點關連都沒有
08/29 19:22, 7F

08/29 21:37, , 8F
節點不見...你一開始prev是NULL
08/29 21:37, 8F

08/29 21:38, , 9F
所以temp->next變成NULL連結就斷開了 後面根本不用看..
08/29 21:38, 9F

08/29 21:39, , 10F
13誡-D可以看一下
08/29 21:39, 10F
文章代碼(AID): #1K05KnJY (C_and_CPP)