#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!