C语言第8讲-结构体n课件
第八讲-结构体与共用体;结构体与共用体;一、结 构 体;如: struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };;(2) 定义结构类型的同时定义结构变量;定义的一般形式:;(1) 类型与变量是不同的概念 ;4.结构体类型变量的引用;6. 结构体数 组;例:三个候选人,每次输入一个得票的候选人的名字, 最后输出各人得票结果;3;7. 指 向 结 构 体 类 型 数 据 的 指 针;(1) 指向结构体变量的指针;① p->n: 得到 p指向的结构体变量中的成员 n的值;例: struct student { int num; char name[20]; char sex; int age; }; struct student stu[3] = {{10101, "LiLin", 'M', 18}, {10102, "ZhangFun", 'M', 19}, {10104, "Wang Min", 'F', 20}};;② P=stu; 指向stu[0];①. 若 p 的初值为 stu ,即指向第一个元素,则 p+1指 向 下一个元素的起始地址。;例:有一个结构体变量stu,内含学生学号、姓名和三门课的成绩。 要求在main函数中赋以值,在另一函数print中将它们输出。;void print(p)struct studnt *p; { printf (format, p->num, p->name, p->score[0], p->score[1], p->score[2]); printf ("\n"); }; 其中 main 函数中最后一行调用 print 函数 ,也可改用print (stu); 即实参改用结构体变量(而不是指针)。;struct stu{int x; int *y; }*p;int s1[4]={10,20,30,40};struct stu a[4]={50,&s1[0],60,&s1[1],70,&s1[2],80,&s1[3]};main(){p=a;printf("%d ",++p->x);printf("%d ",(++p)->x);printf("%d ",++(p->x));printf("%d ",++(*p->y));printf("%d ",*++p->y);}; 用指针处理链表 ;3、free(ptr):释放由ptr指向的内存区。;链表结构的要点:1、对链表的操作:建立链表、输出链表、链结点的插入、删除、修改等操作2、创建新结点时,即:链表的新建、链表的插入。必须为链指针开辟存储空间: p1=(struct 结构体名 *)malloc (sizeof(struct 结构体名));3、对链表的操作以函数完成时,常创建一个带头节点的函数。4、结点中成员的访问。5、链指针的移动和尾指针为空。;8910189.5
;struct stu *creat( ) {struct stu *head, *p1, *p2; n = 0 ; p1=p2=(struct student *)malloc(sizeof(struct stu); scanf ("%d, %f", &p1->num, &p1->sco); head = NULL;
;while(p1->num! = 0){ n++; if(n == 1) head = p1; else p2->next = p1; p2 = p1; p1=(struct stu *)malloc(sizeof(struct stu)); scanf ("%ld,%f", &p1->num, &p1->score); } p2->next = NULL; return (head); };void print (head)struct student *hea