C语言:关于链表的输出问题,为什么需要两个重复的定义?
#include<stdio.h>#include<malloc.h>#defineLENsizeof(structstudent)structstudent*creat...
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct student)
struct student *creat(); // 创建链表
struct student
{
int num;
float score;
struct student *next;
};
struct student *creat()
{
struct student *head;
struct student *p1, *p2;
p1 = p2 = (struct student *)malloc(LEN); // 第一次定义
printf("Please enter the num :");
scanf("%d", &p1->num);
printf("Please enter the score :");
scanf("%f", &p1->score);
head = NULL;
n = 0;
while( p1->num )
{
n++;
if( 1 == n )
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
p1 = (struct student *)malloc(LEN);//第二次定义,为什么这里还需要定义一次?
printf("\nPlease enter the num :");
scanf("%d", &p1->num);
printf("Please enter the score :");
scanf("%f", &p1->score);
}
p2->next = NULL;
return head;
}
我觉得这是重复的定义,为什么需要这样? 展开
#include <malloc.h>
#define LEN sizeof(struct student)
struct student *creat(); // 创建链表
struct student
{
int num;
float score;
struct student *next;
};
struct student *creat()
{
struct student *head;
struct student *p1, *p2;
p1 = p2 = (struct student *)malloc(LEN); // 第一次定义
printf("Please enter the num :");
scanf("%d", &p1->num);
printf("Please enter the score :");
scanf("%f", &p1->score);
head = NULL;
n = 0;
while( p1->num )
{
n++;
if( 1 == n )
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
p1 = (struct student *)malloc(LEN);//第二次定义,为什么这里还需要定义一次?
printf("\nPlease enter the num :");
scanf("%d", &p1->num);
printf("Please enter the score :");
scanf("%f", &p1->score);
}
p2->next = NULL;
return head;
}
我觉得这是重复的定义,为什么需要这样? 展开
4个回答
展开全部
这个不叫重复定义,这是为p1动态分配内存空间,这样把不连续的内存空间连接起来构成链表
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
动态创建一个结点,p1是一个不断变换的节点,因为每一次分配一个,它的指针域都会有新的值啦!不是第二次定义,是创建新节点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是重复定义。。。原来的那个p1 已经用掉了。。。你所谓的第二个定义 其实 已经开辟了别的地址空间。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有必要啊,while里面的malloc是重新建立一个节点啊,第一个malloc只是建立了一个;
ps:你这里malloc(LEN)和malloc(1)的效果是一样的;
ps:你这里malloc(LEN)和malloc(1)的效果是一样的;
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询