免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1547 | 回复: 2
打印 上一主题 下一主题

链表初始化问题,疑惑许久! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-28 21:50 |只看该作者 |倒序浏览
带头指针的链表初始化
void Initcity(Linkcity         *L)        /*初始化链表*/
{   
        *L=(Linkcity)malloc(sizeof(Node));
   (*L)->next=NULL;
}



为什么要一定用  Linkcity         *L
可以直接这样吗?
void Initcity(Linkcity         L)        /*初始化链表*/
{   
        L=(Linkcity)malloc(sizeof(Node));
   (L)->next=NULL;
}

这样可以吗?为什么书上都是要定义为  Linkcity         *L型
这样有什么意义,谁能帮我详细的讲解一下,实在是困扰太久了!

书上说L是指向头指针的指针,为什么要这个指针啊!好像没什么用....

寻求帮助!!!

论坛徽章:
0
2 [报告]
发表于 2009-05-28 22:08 |只看该作者
原帖由 iwaich 于 2009-5-28 21:50 发表
带头指针的链表初始化
void Initcity(Linkcity         *L)        /*初始化链表*/
{   
        *L=(Linkcity)malloc(sizeof(Node));
   (*L)->next=NULL;
}



为什么要一定用  Linkcity         *L ...


Linkcity 是链表结构吗? 把它结构列出来吧

你这个 Initcity() 应该要:

void Initcity(Linkcity **L)
{
}

论坛徽章:
0
3 [报告]
发表于 2009-05-28 22:37 |只看该作者
你那本书中Linkcity应该是类似于这样的定义吧:typedef struct linkcity * Linkcity;
直接用代码说

struct linkcity{...};
typedef struct linkcity * Linkcity;

void Initcity(Linkcity L)
{
      L = malloc(sizeof(struct linkcity));
      L -> next = NULL;
}

int main(void)
{
      Linkcity head = NULL;

      Initcity(head);

      return 0;
}

首先请搞清楚函数的栈帧的概念. 显然这个程序得不到链表的头指针,因为在main()函数中,head的值一直就是NULL. 在Initcity()中,L保存所分配的内存空间的首地址,但是参数L是被看做局部变量使用的,
Initcity()执行结束,L的生命也就结束了.在main()中我们仍然没有获得链表的头指针.
如果要用一级指针可以这么写:

Linkcity Initcity(Linkcity L)
{
      L = malloc(sizeof(struct linkcity));
      L -> next = NULL;
      
      return L;
}

int main(void)
{
       Linkcity head = NULL;

       head = Initcity(head);

       return 0;
}

[ 本帖最后由 lynxbing 于 2009-5-29 10:35 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP