[问题] 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