CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

链表的头指针在函数里修改怎么没有用?

楼主NullGate(我爱小白)2003-02-02 19:40:34 在 C/C++ / C语言 提问

void   del(head,num)  
  struct   student   *head;  
  long   num;  
  {  
  struct   student   *p1,*p2;  
  //表空  
  if(head==NULL){  
  printf("\nlist   null!\n");  
  return   ;  
  }  
  p1=head;  
  //寻找要删除的节点  
  while(p1->num!=num   &&   p1->next!=NULL)  
  {  
  p2=p1;  
  p1=p1->next;  
  }  
  //找到了要删除的节点  
  if(num==p1->num)  
  {  
  if(p1==head)//要删除的节点是头节点  
  head=p1->next;  
  else   p2->next=p1->next;  
  printf("delete:%ld\n",num);  
   
  }else//没有找到删除的节点  
  printf("%ld   not   been   found!\n",num);  
  return   ;  
  }  
   
  这是个单向链表的删除节点函数  
  删除头节点居然不起作用,但可以删除其它节点  
   
  我知道通过return   head可以改正这个错误,但上面的方法为什么不行呢? 问题点数:100、回复次数:5Top

1 楼Caoyu015(酷鱼一代)回复于 2003-02-02 20:07:25 得分 20

呵呵,应该带入的是   struct   student   **phead   才行.  
  你原来是   struct   student   *head   是值传递!   我以前做BTree的时候也遇到你这样的情况,一般在C语言中没有变参,所以某些程序中要特别注意,比如:   递归等等....Top

2 楼Polarislee(北极星)(无房无车,飘在北京)回复于 2003-02-02 20:09:50 得分 10

要用二重指针Top

3 楼SilverChariot(丁丁在CSDN)回复于 2003-02-02 20:35:10 得分 10

if(p1==head)//要删除的节点是头节点  
  head=p1->next;  
  只是移动了头指针,所以return   head可以。Top

4 楼Frank001(Frank)回复于 2003-02-02 21:29:29 得分 50

我的看法:  
  当你创建这样一个函数  
  void   del(struct   student*   head,long   num);  
   
  然后去调用他,例:  
  del(h,3);     //h为struct   student*类型  
  假设:&h为   0010;     //为h开辟的地址;  
                h为   1000;     //0010   里存放的内容,是一个地址  
              *h为   8;           //1000   里存放的内容,实际上在你的程序里这里存放的是一个结构型变量。  
  del(h,3);   当调用了这一句时,实际上是把1000传给了head;  
  这时:  
        &head一定不是   0010;      
  //系统会给head新开辟一个内存,这里假设为   0020  
          head为   1000;      
              *h为   8;            
  head=p1->next;      
  //当执行这句时实际上是把head给改了,就是说0020里的内容给改了。假设改为了2000;  
   
  这时:  
  &h还是等于   0010;     0010里的还是1000  
  &head还是等于   0020;   0020里的已经改成了2000  
  所以h没有变。也就是你说的删除头节点不起作用。  
  要是用return   head的话,就是把0010里的内容给改成2000了,当然就起作用啦。  
  Top

5 楼micropentium6(小笨|曾经的美好)回复于 2003-02-02 22:39:56 得分 10

up  
  使用二级指针或者传递指针的引用   student*   &headTop

相关问题

  • 函数指针
  • 指针函数
  • 函数指针
  • 函数指针
  • 函数指针
  • 请问:如何用指针数组和函数指针做函数列表?
  • 函数指针和指针函数
  • 函数指针,唉.......
  • 是不是有虚函数的类才有V表指针
  • 虚函数表指针的偏移量的问题

关键词

  • 节点
  • 函数
  • 指针
  • 内容
  • null
  • p1
  • 删除
  • head
  • 存放
  • num

得分解答快速导航

  • 帖主:NullGate
  • Caoyu015
  • Polarislee
  • SilverChariot
  • Frank001
  • micropentium6

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo