数据结构c语言初始化单链表的头结点 为什么这么写不对 求高手解答!

这是定义的结构体typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;主函数是这么定义的Li... 这是定义的结构体
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
主函数是这么定义的 Linklist la;LinkList0505 l;
函数调用 l.InitList_L(la);//调用的就是下面的这个函数)
以下是构造空的线性链表的写法(带头结点,实际上就是构造头结点)
为什么必须是
Status LinkList0505::InitList_L(LinkList &L)
{//操作结果:构造一个空的线性表L。
L=(LinkList)malloc(sizeof(LNode)); //为头结点申请空间
if(!L) return ERROR; //若申请空间失败
L->next=NULL;
return OK;
}
而这样写不对 运行不成功!!!(唯一的区别就是 Linklist &L)
Status LinkList0505::InitList_L(LinkList L)
{//操作结果:构造一个空的线性表L。
L=(LinkList)malloc(sizeof(LNode)); //为头结点申请空间
if(!L) return ERROR; //若申请空间失败
L->next=NULL;
return OK;
}
对比以下代码中 上面的Linklist与下面的data* 不一样吗?(我觉得一样啊)
为什么下面对 上面不对。
typedef struct data_type
{  
 int age;   
char name[20];   
} data;   
data *bob;   
bob = (data *) malloc( sizeof(data) );  
if( bob != NULL )
{  
bob->age = 22;   
strcpy( bob->name, "Robert" );   
printf( "%s is %d years old\n", bob->name, bob->age );   
}   
free( bob );
展开
 我来答
han43001
2012-02-14 · TA获得超过363个赞
知道小有建树答主
回答量:355
采纳率:0%
帮助的人:369万
展开全部
你的显然是有问题的。
引用传递与非引用传递是不同的。你百度下引用传值,就会明白。
按你的写法,在函数调用时,会在init函数中生成一个临时的变量L,而不是main里面的L,你分配的空间也是给临时的变量L分配,而不是main里面的L。 引用的话,则只有一个L,所以可以。
一个很经典的小例子,void swap(int &a,int &b)。就是交换a.b的值的函数。如果,没用&的话,你看看是行不通的。
terranlong
2012-02-11 · TA获得超过7294个赞
知道大有可为答主
回答量:2660
采纳率:0%
帮助的人:3999万
展开全部
第二个肯定是错的,L是LinkList类型的,不能用malloc分配内存
但第一个,传递进去的是地址,因此L是LinkList*类型的,可以用malloc来分配内存
追问
Linklist是什么类型的?
追答
对不起哈,看错了,LinkList是LNode*类型的,已经是个指针了。
第二个不是运行不成功,而是,作为指针的L,它在函数里面操作的不能传到外面去。例如:
void fun(int &a)
{
...
}
函数里面对a的操作可以通过参数传递回出去
void fun(int a)
{
...
}
但是这个a只是一个形参,不能通过参数传递回原来的实参那里,在里面操作的只是对形参a的操作,而跟实参完全没关系
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
问希夷
2012-02-11 · TA获得超过123个赞
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:88.5万
展开全部
传指针的指针才可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式