赞
踩
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- struct film{
- char name[40];
- int id;
- struct film *next;
- };
-
-
- int main(void){
-
- struct film *head=NULL;
- struct film *ls,*work;
-
- char input[40];
-
- int i=0;
- while(i<3){ //设定3个struct film
- puts("输入名字");
- fgets(input,40,stdin);
-
- work=(struct film*)malloc(sizeof(struct film)); //每个struct film 的指针
- if(head==NULL)
- head=work; //存储第一个非空地址,用与以后程序的从头查询操作
- else{
- ls->next=work; //存储下一个struct film 指针,因为上次生成为NULL
-
- }
-
- work->next=NULL; //每次生成指针时,next都是NULL,下一次生成指针时再为上一次指针赋值
-
- strcpy(work->name,input); //赋值
- work->id=i;
- i++;
-
- ls=work; //当head=null时,ls为第一个非null struct film
- }
-
- work=head; //指向第一个非NULL film指针
- while(work!=NULL){
- printf("name:%s id:%d\n",work->name,work->id); //显示全部film
- work=work->next; //指向下一个film指针
- }
- work=head;
- while(work!=NULL){
- free(work); //释放全部malloc
- work=work->next; //指向下一个film指针
- }
- return 0;
- }
程序在生成第一个struct flim时,它的next指针为NULL,它的值是在第二个flim生成时才为第一个next赋值的。这里用了两个struct flim指针变量ls work 来转换实现。ls可以理解为暂存前一个指针,work理解为后一个指针。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。