c语言初始化为null,关于线性表创建的,其中初始化,有个NULL

#include 

#include 

typedef struct SeqList{

char data;

struct SeqList *next;

}SeqList;

int InitList(SeqList *l)

{

l=(SeqList *)malloc(sizeof(SeqList));

if(l!=NULL)

{

l->next=NULL;

return 1;

}

return 0;

}

void CreatList(SeqList *l)

{

if(l->next==NULL)

printf("yes\n");

}

int main()

{

SeqList l;

InitList(&l);

CreatList(&l);

return 0;

}

只想问,为什么打印不出来yes

解决方案

20

int InitList(SeqList *l)

{

l=(SeqList *)malloc(sizeof(SeqList));

最后一句是修改这个参数本身,而不是传递过来的参数,可以试试

int InitList(SeqList *l)

{

l->next =(SeqList *)malloc(sizeof(SeqList));

20

#include 

#include 

typedef struct SeqList{

char data;

struct SeqList *next;

}SeqList;

int InitList(SeqList **l)

{

*l=(SeqList *)malloc(sizeof(SeqList));

if(l!=NULL)

{

(*l)->next=NULL;

return 1;

}

return 0;

}

void CreatList(SeqList *l)

{

if(l->next==NULL)

printf(“yes\n”);

}

int main()

{

SeqList *l;

InitList(&l);

CreatList(l);

return 0;

}

50

lz犯了一个错误, 参数的传递只是传递一个副本,对于InitList来说, SeqList *l 这个只是 main 那个 l 的副本, 所以调用InitList后, main中的那个l, 并没有改变。由于在初始化时, l 的内容可能被初始化为0xcccccccc, 所以createLIst中打印不出来yes. 这样改

int InitList(SeqList **l)

{

(*l)=(SeqList *)malloc(sizeof(SeqList));

if((*l)!=NULL)

{

(*l)->next=NULL;

return 1;

}

return 0;

}

void CreatList(SeqList *l)

{

if(l->next==NULL)

printf("yes\n");

}

int main()

{

SeqList *l;

InitList(&l);

CreatList(l);

return 0;

}

P.S. 不要单字母命名变量, 特别是用l

///

20

要通过InitList函数来修改main函数里的l的指向

必须传二级指针或一级指针的引用,光传一级指针是没有用的(一级指针指向修改指针所指向的区域)

(原因是main函数的l和InitList函数的形参l他们仅仅是指向同一块内存区域,

但两者本身并不是同一个指针,所以你对InitList函数的l进行操作是影响不到main函数的l的)

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于线性表创建的,其中初始化,有个NULL!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值