有关链表中参数赋值的问题

#include<stdio.h>#include<stdlib.h>typedefstructLNode{char*data;structLNode*next;}*Li... #include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
char* data;
struct LNode *next;
}*LinkList;

InitList(LinkList *L);

int main()
{
LinkList *L;
InitList(&L);

return 0;
}

InitList(LinkList *L)
{
LinkList *head;
L = (LinkList *)malloc(sizeof(LinkList));
head = L;
L->next = NULL;
return 0;
}

1、函数InitList(LinkList *L);在调用时参数为什么要写成&L?
2、 L->next = NULL;在编译时会出现“request for member `next' in something not a structure or union”的错误,如果改成(*L)->next = NULL;这个错误没了,但是在执行过程中会出现“segmentation fault”,请问是为什么?
展开
 我来答
kaixingui2012
2012-10-19 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6766万
展开全部
帮你改好了,你若能看懂了,可以追问,否则,结合程序去看书吧
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
char* data;
struct LNode *next;
}*LinkList; //这里定义一个新的变量类型 LinkList,相当于struct LNode *
InitList(LinkList *L);
int main()
{
LinkList L; //这里不要定义二维指针
InitList(&L); //传地址为的是带回L自身的变化(将L看成一个盒子,这里再将L装到另一个盒子里传递给子函数)
return 0;
}
InitList(LinkList *L) //这里因为是原L变量的地址,所以是二维指针
{
LinkList head; //这里应该定义一个结点指针,而不是二维的
head=(LinkList)malloc(sizeof( struct LNode )); //这里表示申请一个结点空间
head->next=NULL; //空表尾
*L=head ; //将新申请的结点地址值存到L指针中的地址所指向的位置(L是第一层盒子,*L是第二层盒子,将head的值放到第二个盒子里,这样才能通过第一个盒子将head值带回去)
return 0;
}
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
lyhdez1
2012-10-19 · TA获得超过1942个赞
知道小有建树答主
回答量:687
采纳率:100%
帮助的人:859万
展开全部
错误的部分需要这么修改
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
char* data;
struct LNode *next;
}*LinkList;

InitList(LinkList L);//LinkList L其实就是LNode *L,再加*就变为LNode **L,这是不对的

int main()
{
LinkList L;//这里不能有*,道理同上
InitList(L);//&去掉

return 0;
}

InitList(LinkList &L)//*改为&
{
LinkList head;//去掉*
L = (LinkList )malloc(sizeof(LinkList));//去掉*
head = L;
L->next = NULL;
return 0;
}
引用的目的是让实参和形参公用一个地址,这样形参的改变可以回馈到实参。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式