C语言 结构体指针申请内存空间解决方案
C语言 结构体指针申请内存空间
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TSIZE 45
struct film {
char title[TSIZE];
int rating;
struct film *next; /*指向列表的下一个结构*/
}stu;
int main(int argc, char *argv[])
{
struct film *head=NULL;
struct film *prev,*current;
char input[TSIZE];
/*收集电影信息*/
puts("请输入电影标题");
while(gets(input)!=NULL && input[0]!='\0')
{
// current=&stu;
current=(struct filem *)malloc(sizeof(struct film)); /*申请内存空间*/
if(head==NULL)
head=current;
else
prev->next=current;
current->next=NULL;
strcpy(current->title,input);
puts("请输入电影等级");
scanf("%d",¤t->rating);
while(getchar()!='\n')
continue;
puts("请输入下一个电影标题");
prev=current;
}
/*给出电影列表*/
if(head==NULL)
printf("没有数据");
else
printf("下面的电影数据");
current=head;
while(current!=NULL)
{
printf("标题[%s],等级[%d]\n",current->title,current->rating);
current=current->next;
}
/*任务完成 清空内存*/
current=head;
while(current!=NULL)
{
free(current);
current=current->next;
}
printf("再见");
system("PAUSE");
return 0;
}
prev->next=current;
current->next=NULL;
这两句是啥意思啊??current不应该是结构体内存空间的首地址吗??为什么prev->next还指向首地址啊??prev=current; 这句话啥意思啊??prev指向结构体的内存空间的首地址吗??
------解决方案--------------------
这是C Primer Plus当中的的例题吧?
current只是个临时指针,其值是随着接收malloc所产生的指针而不断变化的。它的作用是让通过malloc分配内存而新产生的链表成员,以prev-next = current的方式一个一个接续下去。
当链表为空,即head == NULL时,首先将第一个产生的链表成员的指针赋给head,这样整个链表就有了head(第一个元素了)。
否则,即链表不为空,则将新产生的链表成员通过prev-next = current的方式挂到前面已经产生的链表成员的next指针上(成为新的链表末端成员),以此类推,直到不再产生新的链表成员为止。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TSIZE 45
struct film {
char title[TSIZE];
int rating;
struct film *next; /*指向列表的下一个结构*/
}stu;
int main(int argc, char *argv[])
{
struct film *head=NULL;
struct film *prev,*current;
char input[TSIZE];
/*收集电影信息*/
puts("请输入电影标题");
while(gets(input)!=NULL && input[0]!='\0')
{
// current=&stu;
current=(struct filem *)malloc(sizeof(struct film)); /*申请内存空间*/
if(head==NULL)
head=current;
else
prev->next=current;
current->next=NULL;
strcpy(current->title,input);
puts("请输入电影等级");
scanf("%d",¤t->rating);
while(getchar()!='\n')
continue;
puts("请输入下一个电影标题");
prev=current;
}
/*给出电影列表*/
if(head==NULL)
printf("没有数据");
else
printf("下面的电影数据");
current=head;
while(current!=NULL)
{
printf("标题[%s],等级[%d]\n",current->title,current->rating);
current=current->next;
}
/*任务完成 清空内存*/
current=head;
while(current!=NULL)
{
free(current);
current=current->next;
}
printf("再见");
system("PAUSE");
return 0;
}
prev->next=current;
current->next=NULL;
这两句是啥意思啊??current不应该是结构体内存空间的首地址吗??为什么prev->next还指向首地址啊??prev=current; 这句话啥意思啊??prev指向结构体的内存空间的首地址吗??
------解决方案--------------------
这是C Primer Plus当中的的例题吧?
current只是个临时指针,其值是随着接收malloc所产生的指针而不断变化的。它的作用是让通过malloc分配内存而新产生的链表成员,以prev-next = current的方式一个一个接续下去。
当链表为空,即head == NULL时,首先将第一个产生的链表成员的指针赋给head,这样整个链表就有了head(第一个元素了)。
否则,即链表不为空,则将新产生的链表成员通过prev-next = current的方式挂到前面已经产生的链表成员的next指针上(成为新的链表末端成员),以此类推,直到不再产生新的链表成员为止。
while(gets(input)!=NULL && input[0]!='\0')
{
current=(struct filem *)malloc(sizeof(struct film)); /*产生新的链表成员*/
if(head==NULL)
head=current; //如果链表为空,则将第一个产生的链表成员的指针赋给head
else
prev->next=current; //将后来产生的链表成员挂在链表成员的next指针上,使其成为新的链表末端成员
current->next=NULL; //开放新的链表尾巴的next指针,以便接收可能会挂上来的下一个新的末端成员
strcpy(current->title,input);
puts("请输入电影等级");
scanf("%d",¤t->rating);
while(getchar()!='\n')
continue;
puts("请输入下一个电影标题");
prev=current; //记录当前新产生的链表末端成员的指针,这个指针即为