代码如下:
学生管理信息
STU:学生信息结构体
问题出在初始化部分[code]#define LEN sizeof(struct stu_info)
typedef struct stu_info
{
char name[20];
long num;
float math_score;
float C_score;
float Eng_score;
struct stu_info *next;
}STU;
STU * Stu_list_Init(STU *L)//初始化链表 //有问题!!!!!!!!!!!!!!为什么需要有返回值 才能正确运行
{
STU *p;
p=L;
p=(STU *)malloc(LEN);
if(p==NULL)
{
puts("申请空间失败!");
exit(0);
}
p->next=NULL;
return L;
}
void Creat_list(STU *L)//创建链表
{
STU *tail,*p;
tail=L;
puts("Input students info:");
while(1)
{
p=(STU *)malloc(LEN);
if(p==NULL)
{
puts("申请空间失败!");
exit(0);
}
printf("\t\tname:");
scanf("%s",p->name);
if(strncmp(p->name,"end",3)==0)
{
free(p);
break;
}
printf("\t\tnumber:");
scanf("%ld",&p->num);
printf("\t\tmath:");
scanf("%f",&p->math_score);
printf("\t\tC:");
scanf("%f",&p->C_score);
printf("\t\tEng:");
scanf("%f",&p->Eng_score);
p->next=NULL;
tail->next=p;
tail=p;
}
tail->next=NULL;
fflush(NULL);
}
int main()
{
struct stu_info *stu;
stu=Stu_list_Init(stu);
Creat_list(stu);
return 0;
}[/code]在链表初始化部分[code]STU * Stu_list_Init(STU *L)//初始化链表 有返回值
{
STU *p;
p=L;
p=(STU *)malloc(LEN);
if(p==NULL)
{
puts("申请空间失败!");
exit(0);
}
p->next=NULL;
return L;
}[/code]这么写初始化函数(有返回值)程序运行正常,但是若改为无返回值函数,则后面创建链表是出问题,想不通 运行时会出现 段错误 提示[code]void * Stu_list_Init(STU *L)//初始化链表 //无返回值
{
STU *p;
p=L;
p=(STU *)malloc(LEN);
if(p==NULL)
{
puts("申请空间失败!");
exit(0);
}
p->next=NULL;
}[/code]为什么呢?这两种写法有本质上有什么不同?求解???