链表问题

@Ta 2013-07-20 4327点击
void addrect(rect *head,rect *newrect) {
    newrect->next=head;
    head=newrect;
}

哪有错,head一直是NULL,没有变…
回复列表(14|隐藏机器人聊天)
  • @Ta / 2013-07-20 / /
    没头没尾的,谁能看明白
  • @Ta / 2013-07-20 / /
    小李 你会C?
  • @Ta / 2013-07-20 / /
    @匿名,学过一点,读过c_primer_plus
  • @Ta / 2013-07-20 / /
    那你看这个看不懂?
  • @Ta / 2013-07-20 / /
    那你看这个看不懂?
  • @Ta / 2013-07-20 / /
    @匿名,你自己写的?
  • @Ta / 2013-07-20 / /
    @匿名,你怎么调用这个函数的?你链表本身链好了吗?
  • @Ta / 2013-07-20 / /
    @匿名,你可以把完整代码传上来
  • @Ta / 2013-07-21 / /
    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 / /
    @幻阳化翼 @老虎会游泳 换行被吞了,我下午还要上班先睡
  • @Ta / 2013-07-22 / /
  • @Ta / 2013-07-22 / /
    @匿名,我没看到你哪里给head赋值了啊。
  • @Ta / 2013-07-22 / /
    怎样才是赋值@老虎会游泳
  • @Ta / 2013-07-22 / /
    rect *testhead=NULL;
    addrect(testhead,newrect(…));
    你自己给head赋的NULL,它就一直是NULL啊,函数又不能改变值传递的变量的值。
    你肯定很奇怪为什么是值传递,“我明明传递的是一个指针啊。”
    对,你传递的确实是一个指针,但是它是这个指针的值(它指向的地址),而不是这个指针自身的地址——程序运行时会自动把这个指针复制一份做为参数,这样你在函数里改变head的指向根本没用。
    要在函数改变一个指针,你必须要给指针取地址:
    addrect(&testhead,newrect(…));
    void addrect(rect **head,rect *newrect) {
        newrect->next=*head;
        *head=newrect;
    }
添加新回复
回复需要登录