|
10驿站币
有几个点不太懂求大佬解释。
include<stdio.h>
struct employee
{
int no;
char name[20];
struct employee *next;
};
int main()
{
int n;
char ch[20];
printf("n=");
scanf_s("%d\n", &n);
struct employee *head, *pt, *pn;
int i = 1;
pn = (struct employee *)malloc(sizeof(struct employee));
head = pn;
pt = pn;
printf("input no and name of %d employee \n", i);
gets_s(pn->name, 20);
gets_s(ch, 4);
pn->no = atoi(ch);
pn->next = NULL; //pn->next这里原本不就是空的吗?
printf("no=%d, name=%s\n", pn->no, pn->name);
for (i = 2; i <= n; i++)
{
pn = (struct employee *)malloc(sizeof(struct employee)); //这里是说重新分配一个内存空间给pn?
printf("input no and name of %d employee \n", i);
gets_s(pn->name, 20);
gets_s(ch, 4);
pn->no = atoi(ch);
pn->next = NULL;
pt->next = pn;
pt = pn; //这个赋值是指什么?
printf("no=%d, name=%s\n", pn->no, pn->name);
}
while (1);
return 0;
} |
最佳答案
查看完整内容
1、pn->next = NULL; //pn->next这里原本不就是空的吗?
谁说原本就是空的,本身 employee 是个结构体类型,默认malloc出来的对象你也没有memset清空的操作,next 为什么会是空呢?只是会指向一个随机的值,所以这里面要清空下!
2、pn = (struct employee *)malloc(sizeof(struct employee)); //这里是说重新分配一个内存空间给pn?
刚才malloc的是链表的第一个节点,这里面malloc实际上是链表的第二个节点,以此类推,以后 ...
上一篇: 求助,第22课作业不会了……下一篇: windows自定义的类型后缀 _PTR作用
|