
有关链表中参数赋值的问题
#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”,请问是为什么? 展开
#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”,请问是为什么? 展开
2个回答
展开全部
帮你改好了,你若能看懂了,可以追问,否则,结合程序去看书吧
#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;
}
#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 切换器等,优质供应商,...
点击进入详情页
本回答由大雅新科技有限公司提供
展开全部
错误的部分需要这么修改
#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;
}
引用的目的是让实参和形参公用一个地址,这样形参的改变可以回馈到实参。
#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;
}
引用的目的是让实参和形参公用一个地址,这样形参的改变可以回馈到实参。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询