关于初始化单链表的问题?

arfu 2000-09-06 09:23:00
typedef struct
{
char name[20];
int age;
}elemtype

struct slnode
{
elemtype data;
struct slnode * next;
}

//下面定义单链表结点结构

typedef struct slnode
{
elemtype data;
struct slnode* next;
}slnodetype;

//初始化代码

int initiate(slnodetype * * h) //指向指针的指针
{
if((*h=(slnodetype *)malloc(sizeof(slnodetype )))==NULL)
return 0;
(* h)->noext =NULL;
return 1;
}

// 书上说,h是单链表的头指针,如果定义为slnodetype *h;将无法带回函数中建立的头指针值。

我不懂,觉得不需用**h, 仅定义为* h 就可。

我把他改为
int initiate(slnodetype * h)
{
if((h=(slnodetype *)malloc(sizeof(slnodetype )))==NULL)
return 0;
(h)->noext =NULL;
return 1;
}
各位觉得有什么问题?? 各位高手讲解???

谢谢帮助
...全文
193 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
maptrix 2000-09-07
  • 打赏
  • 举报
回复
问题不是出在(h)->noext =NULL;这一句上,
而是在
if((h=(slnodetype *)malloc(sizeof(slnodetype )))==NULL)这一句上
因为h是形参,他只是把h的值传到了函数里,所以
h=(slnodetype *)malloc(sizeof(slnodetype ));
对函数外的h并没有改变值,只有将h的指针传到函数里面,通过指针的指向才能将值真正付给h;
*h=(slnodetype *)malloc(sizeof(slnodetype ));这种语句才是把分配的值付给了h;
「已注销」 2000-09-07
  • 打赏
  • 举报
回复
哦,对那刚才说的只限制建立第一个连接,如果是第二个、第三个。。。。必须使用**h
因为你是动态分配的呀,所以分配出来的就是一个指针,当然是需要指像指针的指针拉
「已注销」 2000-09-07
  • 打赏
  • 举报
回复
看你什么定义h的如果是定义成*h的话,传送给initiate就必须是**h就是指像指针的指针
arfu 2000-09-07
  • 打赏
  • 举报
回复
?

求助

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧