C语言链表的问题
简单的生成链表的代码:
#include <stdio.h>
#include <stdlib.h>
struct Student
{
int id;
char *name;
char sex;
int age;
};
struct StudentList
{
struct Student *student;
struct StudentList *next;
};
struct Student makeStudent(int id,char *name,char sex,int age)
{
struct Student student;
student.id=id;
student.name=name;
student.sex=sex;
student.age=age;
return student;
}
struct StudentList * addList(struct Student *student,struct StudentList *head)
{
struct StudentList sl;
sl.student=student;
sl.next=head;
head=&sl;
return head;
}
void show(struct StudentList *head)
{
struct Student *sp;
while(head!=NULL)
{
sp=head->student;
if(sp!=NULL)
{
printf("ID:%d\tName:%s\tSex:%c\tAge:%d\n",sp->id,sp->name,sp->sex,sp->age);
}
head=head->next;
}
}
int main()
{
struct Student sd=makeStudent(1,"Tom",'F',20);
struct Student sd1=makeStudent(2,"Tony",'M',22);
struct StudentList *head=NULL;
head=addList(&sd,head);
head=addList(&sd1,head);
printf("%s\n",head->student->name); //1
printf("%s\n",head->student->name); //2
// show(head);
return 0;
}
上面addList函数添加节点,show函数遍历链表。现在问题是main函数里单独执行注释1或2的printf能产生结果,两个一起执行就只能正常输出一次,第二次不输出,产生错误的返回值。这是为什么呢?
还有如果两个printf都不执行,只执行一个printf("%s\n",head->next->student->name); 结果显示的却是Tony,不应该是Tom的吗?
show函数就更不用说了,一样只能产生一个值,如果前面有printf语句,就一个值也没有。
是链表生成的函数写得不对吗?就是找不出问题来,求大神帮忙看一下。 C 链表 struct
[解决办法]
问题很多呀。
1.
struct StudentList
{
struct Student *student; // 这个也是指针? struct StudentList *next;
};
你的链表里存的都是指针,一个实际数据也没有,空手套白狼啊?
2.就算1里的不是指针是结构体,addList函数中返回的也是局部对象的地址,没有任何意义
3.结构体里的char*没有指向可用的(可改写的空间,或者说没有分配空间),这样的链表基本没有实际用处