已掉线,重新登录

首页 > 绿虎论坛 > 建站 > 主机 (发帖)

标题: 链表问题

作者: @Ta

时间: 2013-07-20

点击: 4314

void addrect(rect *head,rect *newrect) {
    newrect->next=head;
    head=newrect;
}

哪有错,head一直是NULL,没有变…

[隐藏样式|查看源码]


『回复列表(14|隐藏机器人聊天)』

1. 没头没尾的,谁能看明白
(/@Ta/2013-07-20 22:00//)

2. 小李 你会C?
(/@Ta/2013-07-20 22:06//)

3. @匿名,学过一点,读过c_primer_plus
(/@Ta/2013-07-20 22:25//)

4. 那你看这个看不懂?
(/@Ta/2013-07-20 22:40//)

5. 那你看这个看不懂?
(/@Ta/2013-07-20 22:41//)

6. @匿名,你自己写的?
(/@Ta/2013-07-20 22:52//)

7. @匿名,你怎么调用这个函数的?你链表本身链好了吗?
(/@Ta/2013-07-20 22:56//)

8. @匿名,你可以把完整代码传上来
(/@Ta/2013-07-20 23:01//)

9. rect *testhead=NULL;
for(…)
addrect(testhead,newrect(…));
getrects(testhead);
rect *newrect()
{
    rect *temp=malloc(sizeof(rect));
        temp->next=NULL;
    return temp;
}
(/@Ta/2013-07-21 09:33//)

10. @幻阳化翼 @老虎会游泳 换行被吞了,我下午还要上班先睡
(/@Ta/2013-07-21 09:35//)

11. @幻阳化翼 @老虎会游泳 看九楼
(/@Ta/2013-07-22 00:14//)

12. @匿名,我没看到你哪里给head赋值了啊。
(/@Ta/2013-07-22 09:11//)

13. 怎样才是赋值@老虎会游泳
(/@Ta/2013-07-22 09:54//)

14. rect *testhead=NULL;
addrect(testhead,newrect(…));
你自己给head赋的NULL,它就一直是NULL啊,函数又不能改变值传递的变量的值。
你肯定很奇怪为什么是值传递,“我明明传递的是一个指针啊。”
对,你传递的确实是一个指针,但是它是这个指针的值(它指向的地址),而不是这个指针自身的地址——程序运行时会自动把这个指针复制一份做为参数,这样你在函数里改变head的指向根本没用。
要在函数改变一个指针,你必须要给指针取地址:
addrect(&testhead,newrect(…));
void addrect(rect **head,rect *newrect) {
    newrect->next=*head;
    *head=newrect;
}
(/@Ta/2013-07-22 10:48//)

回复需要登录

9月16日 06:49 星期二

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1