[問題] pointer和link list的問題

作者: kdok123 (小天)   2014-08-29 18:25:51
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);
}
////以上範例是測試反轉鍊表的意外範例,鍊表沒有反轉,印出的結果發現頭後面的
節點都不見了(這裡省略了部分函數,只留問題)////
問題:為什麼函數沒有辦法改變位址,可在鍊表中卻會被改動呢??
(抱歉剛剛弄錯範例,以上才是正確想問的,謝謝)
作者: Feis (永遠睡不著 @@)   2014-08-29 18:27:00
你的測試是錯誤的. 應該要 b = pointer(b);
作者: kdok123 (小天)   2014-08-29 18:52:00
以上是想要知道函數的運作範圍,所以才都宣告void
作者: LPH66 (-6.2598534e+18f)   2014-08-29 19:19:00
一個觀念: C 語言只有 pass by value, 傳指標進去就只是傳指標值進去而已, 所以裡面對傳進來的值本身改動跟外面無關對指標指向的東西改動外面才看得到簡單比喻: 我複製了把門鑰匙給你, 你進門拿東西我會知道但你把門鑰匙撞凹了跟我的門鑰匙卻一點關連都沒有
作者: future314 (未來π)   2014-08-29 21:37:00
節點不見...你一開始prev是NULL所以temp->next變成NULL連結就斷開了 後面根本不用看..13誡-D可以看一下

Links booklink

Contact Us: admin [ a t ] ucptt.com