看板 C_and_CPP 關於我們 聯絡資訊
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
Feis: 你的測試是錯誤的. 應該要 b = pointer(b); 08/29 18:27
※ 編輯: kdok123 (140.112.25.105), 08/29/2014 18:47:57
kdok123: 以上是想要知道函數的運作範圍,所以才都宣告void 08/29 18:52
LPH66: 一個觀念: C 語言只有 pass by value, 傳指標進去就只是傳 08/29 19:19
LPH66: 指標值進去而已, 所以裡面對傳進來的值本身改動跟外面無關 08/29 19:20
LPH66: 對指標指向的東西改動外面才看得到 08/29 19:21
LPH66: 簡單比喻: 我複製了把門鑰匙給你, 你進門拿東西我會知道 08/29 19:22
LPH66: 但你把門鑰匙撞凹了跟我的門鑰匙卻一點關連都沒有 08/29 19:22
future314: 節點不見...你一開始prev是NULL 08/29 21:37
future314: 所以temp->next變成NULL連結就斷開了 後面根本不用看.. 08/29 21:38
future314: 13誡-D可以看一下 08/29 21:39