《c语言教程 (11).ppt》由会员分享,可在线阅读,更多相关《c语言教程 (11).ppt(66页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十一章第十一章结构体与共用体结构体与共用体江苏大学计算机学院计算机科学系2教学要求、重点与难点教学要求、重点与难点l要求要求、了解结构体类型变量及结构体数组;2、掌握结构指针;3、掌握用指针处理链表;4、了解共用体的概述和枚举类型的说明;5、简单了解用 typedef typedef 定义类型。l重点与难点重点与难点1.结构体及结构体数组的引用;2.用指针处理链表。23内内 容容1结构体类型的定义2定义结构体类型变量的三种方法3结构体变量的引用4 结构体变量的初始化5结构体数组6指向结构体类型数据的指针 7用指针处理链表8 共用体 本章作业 本章小结9 枚举类型3411.1结构体类型的定义结
2、构体类型的定义 在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。显然不能用一个数组来存放这一组数据。如:语言中提供了另一种构造数据类型“结构体”。它相当于其它高级语言中的记录。“结构体”是一种构造类型,它是由若干“成员”组成的 num name sex age score addr 10010 Li Fan M 18 87.5 Beijing4511.1结构体类型的定义结构体类型的定义一、定义一个结构体的一般形式为:struct 结构名 成员表列 ;二、成员类型说明形式为:类型说明符 成
3、员名;因此若有n个成员,其结构体定义形式为:struct 结构名 类型说明符1 成员名1;类型说明符2 成员名2;.类型 说明符n 成员名n;;例如:struct student int num;char name20;char sex;int age;float score;char addr30;注意在括号后的分号是不可少的。5611.2定义结构体类型变量的三种方法定义结构体类型变量的三种方法一、先定义结构体类型,再定义变量名:定义结构体类型的一般形式:struct 结构体名 成员表列;定义结构体变量的一般形式:struct 结构体名 变量名;二、定义结构类型的同时定义结构变量:.定义的一
4、般形式:struct 结构体名 成员表列 变量名表列;三、直接定义结构类型变量 定义的一般形式:struct 成员表列 变量名表列;6711.2定义结构体类型变量的三种方法定义结构体类型变量的三种方法一、先定义结构体类型,再定义变量名:如:struct student int num;char name20;char sex;int age;float score;char addr30;struct student s1,s2;/*变量定义*/?29?1900?值值addrscoreagesexnamenum元素元素654321序号序号结构体变量结构体变量 S1S1,S2 S2 的元素在内存
5、中的排列次序的元素在内存中的排列次序7811.2定义结构体类型变量的三种方法定义结构体类型变量的三种方法二、定义结构类型的同时定义结构变量:.如:struct student int num;char name20;char sex;int age;float score;char addr30;s1,s2;?29?1900?值值addrscoreagesexnamenum元素元素654321序号序号结构体变量结构体变量 S1S1,S2 S2 的元素在内存中的排列次序的元素在内存中的排列次序8911.2定义结构体类型变量的三种方法定义结构体类型变量的三种方法三、直接定义结构类型变量:如:str
6、uct int num;char name20;char sex;int age;float score;char addr30;s1,s2;?29?1900?值值addrscoreagesexnamenum元素元素654321序号序号结构体变量结构体变量 S1S1,S2 S2 的元素在内存中的排列次序的元素在内存中的排列次序91011.2定义结构体类型变量的三种方法定义结构体类型变量的三种方法四、关于结构体类型的说明:1、类型与变量是不同的概念2、结构体成员可象变量一样单独使用3、成员还可以是结构体变量如:struct date int month;int day;int year;4、成员
7、名可以与变量同名struct student int num;char name20;char sex;int age;struct date birthday;char addr30;s1,s2;101111.3结构体类型变量的引用结构体类型变量的引用 只有在对结构体变量赋值或作为参数传递给函数等特殊情况下可以直接对一个结构体变量整体操作。其他情况只能对结构体变量的各个成员分别引用。一、结构体变量成员引用的一般形式:结构体变量名.成员名 如:s1.num 成员变量可以进行各种运算(如普通变量一样),如:+s1.num;二、结构体嵌套引用:.如:s1.birthday.day成员运算符1112
8、11.3结构体类型变量的引用结构体类型变量的引用三、同类型的结构体变量间可相互赋值 如:s1=s2四、可引用结构体变量或成员的地址 如:scanf(%d,&s1.num);printf(“%o”,&s1);/*输出s1的首地址*/结构体变量的地址主要用于函数参数,传递结构体的地址121311.4结构体变量的初始化结构体变量的初始化外部、静态和自动结构体变量可以初始化如:struct student long int num;char name20;char sex;char addr20;s1=99001,Li Lin,M,Bejing;num name sex addr 99001 LiLi
9、n M BeiJing1234结构体变量s1的元素在内存中的排列次序序号元素值131411.4结构体变量的初始化结构体变量的初始化例10-1 输入某班32名学生的学号和考试成绩,求成绩最好的学生的学号和成绩及总成绩。分析:定义结构体,包含两个成员:学号和成绩。main()struct struct_name int num;float score;student,max;int i;float sum;max.score=0;sum=0;结构体变量student和max,用来存放成绩最好的那个学生的信息。变量初始化i 用来控制循环 sum用来存放总成绩定义结构体类型struct_name141
10、511.4结构体变量的初始化结构体变量的初始化for (i=1;imax.score)max=student;sum=sum+student.score;printf(“n%d%f%f”,max.num,max.score,sum);相当于max.num=student.num;max.score=student.score;151611.5结构体数组结构体数组一、结构体数组的定义如:struct student long int num;char name20;char sex;int age;float score;char addr30;struct student stu3;以上定义了
11、一个数组 stu,数组有3个元素,元素类型为struct student。161711.5结构体数组结构体数组二、结构体数组的初始化如:struct student long int num;char name20;char sex;int age;float score;char addr30;stu3=101,Li ping,M,45,80,Beijing,102,Zhang ping,M,30,62.5,Shanghai,103,He fang,F,22,92.5,Tianjin ;171811.5结构体数组结构体数组例10-2三个候选人,每次输入一个得票的候选人的名字,最后输出各人得票
12、结果分析:(1)输入:选票中候选人名;(2)输出:三个候选人的得票数;(3)算法思路:匹配人名,在每个候选人名下写出票数;数据结构设想:用 leader结构数组来存放候选人名及得票数;struct person char name20;int count;leader3=Li,0,Zhang,0,Fun,0;Leader 数组leader0 leader1 leader2name count name count name countLi 0 Zhang 0 Fun 0181911.5结构体数组结构体数组struct person char name20;int count;leader3=L
13、i,0,Zhang,0,Fun,0;main()int j,k;char leader_name20;for (j=1;j=10;j+)scanf(%s,leader_name);for(k=0;k 3;k+)if(strcmp(leader_name,leaderk.name)=0)leaderk.count+;printf (n);for(j=0;j 3;j+)printf(%5s:%dn,leaderj.name,leaderj.count);人名不同第 j 个候选人的姓名及总得票数for(j=0;j 3;j+)得票数增1得票相同for(k=0;k 3;k+)输入一张选票,人名:lead
14、er_namefor(j=1;j=10;j+)192011.5结构体数组结构体数组例10-3设某组有4 个人,填写如下的登记表,除姓名、学号外,还有三科成绩,编程实现对表格的计算,求解出每个人的三科平均成绩,求出四个学生的单科平均分,并按平均成绩由高分到低分输出。Number Name English Mathema Physics Average 1 Liping 78 98 76 2 Wangling 66 90 86 3 Jiangbo 89 70 76 4 Yangming 90 100 67题目要求的问题多,采用模块化编程方式,将问题进行分解如下:1)结构体类型数组的输入。2)求解各
15、学生的三科平均成绩。3)按学生的平均成绩排序。4)按表格要求输出。5)求解组内学生单科平均成绩并输出。6)定义main()函数,调用各子程序。202111.5结构体数组结构体数组第一步,根据具体情况定义结构体类型。struct stu char name20;/*姓名*/long number;/*学号*/float score4;/*数组依次存放English,Mathema,Physics,Average*/;由于该结构体类型会提供给每个子程序使用,是共用的,所以将其定义为外部的结构体类型,放在程序的最前面。212211.5结构体数组结构体数组第二步,定义结构体类型数组的输入模块。void
16、 input(struct stu arr,int n)/*输入结构体类型数组arr的n 个元素*/int i,j;char temp30;for(i=0;in;i+)printf(ninput name,number,English,mathema,physicn);/*打印提示信息*/gets(arri.name);/*输入姓名*/gets(temp);/*输入学号*/arr i.number=atol(temp);for(j=0;j 3;j+)gets(temp);/*输入三科成绩*/arri.scorej=atoi(temp);222311.5结构体数组结构体数组第三步,求解各学生的三
17、科平均成绩。在结构体类型数组中第i 个元素arri的成员score的前三个元素为已知,第四个Average需计算得到。void aver(struct stu arr,int n)int i,j;for(i=0;in;i+)/*n 个学生*/arri.score 3 =0;for(j=0;j 3;j+)arri.score3=arri.score3+arri.scorej;/*求和*/arri.score3=arri.score3/3;/*平均成绩*/232411.5结构体数组结构体数组第四步,按平均成绩排序,排序算法采用冒泡法。void order(struct stu arr,int n)
18、struct stu temp;int i,j,x,y;for(i=0;i n-1;i+)for(j=0;j arrj+1.score3)temp=arrj;/*结构体类型变量不允许以整体输入或输出,但允许相互赋值*/arrj=arrj+1;/*进行交换*/arrj+1=temp;2425第五步,按表格要求输出。void output(arr,n)/*以表格形式输出有n 个元素的结构体类型数组各成员*/struct stu arr;int n;int i,j;printf(*TABLE*n);/*打印表头*/printf(-n);/*输出一条水平线*/printf(|%10s|%8s|%7s|
19、%7s|%7s|%7s|n,Name,Number,English ,Mathema,physics ,average );/*输出效果为:|Name|Number|English|Mathema|Physics|Average|*/printf(-n );11.5结构体数组结构体数组252611.5结构体数组结构体数组for(i=0;in;i+)printf(|%10s|%8ld|,arri.name,arri.number);/*输出姓名、学号*/for(j=0;j 4;j+)printf(%7.2f|,arri.scorej);/*输出三科成绩及三科的平均*/printf(n);prin
20、tf(-n );262711.5结构体数组结构体数组第六步,求解组内学生单科平均成绩并输出。在输出表格的最后一行,输出单科平均成绩及总平均。void out_row(struct stu arr,int n)/*对n 个元素的结构体类型数组求单项平均*/static float row4;/*定义存放单项平均的一维数组*/int i,j;for(i=0;i 4;i+)for(j=0;j n;j+)rowi=rowi+arrj.scorei;/*计算单项总和*/rowi=rowi/n;/*计算单项平均*/printf(|%19c|,);/*按表格形式输出*/for(i=0;i4;i+)print
21、f(%7.2f|,rowi);printf(n-n);272811.5结构体数组结构体数组for(i=0;in;i+)printf(|%10s|%8ld|,arri.name,arri.number);/*输出姓名、学号*/for(j=0;j p-成员名成员名相当于相当于student.student.成员名成员名pstudent313211.6指向结构体类型数据的指针指向结构体类型数据的指针*p.成员名p=&student.score;不能用指向某个结构体变量的指针指向该结构体变量的某个成员。说明:和成员运算符一样,“-”为指向运算符,是运算优先级最高的运算符。由于成员运算符“.”的运算优先
22、级高于运算符“*”,因此(*p).成员名中()不能少。323311.6指向结构体类型数据的指针指向结构体类型数据的指针例10-4#include string.hmain()struct student long int num;char name20;char sex;float score;struct student stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,Li Lin);stu_1.sex=M;stu_1.score=89.5;printf (%ld,%s,%c,%f n,(*p).num,(*p).name,(*p).s
23、ex,(*p).score);Pnum name sex score89101 Li Lin M 89.5 stu_1占4字节占4+20+1+4=29字节333411.6指向结构体类型数据的指针指向结构体类型数据的指针二、指向结构体数组的指针 例10-5 struct student long int num;char name20;char sex;int age;struct student stu3=10101,LiLin,M,18,10102,ZhangFun,M,19,10104,Wang Min,F,20;main()struct student*p;printf(No.Name
24、sex agen);for(p=stu;p num,p-name,p-sex,p-age);343511.6指向结构体类型数据的指针指向结构体类型数据的指针 P=stu;指向stu0 判断P stu+3;再打印 stu0;P+;指向stu1 判断 Pnum:先使 p自加 1,然后得到它指向的 元 素中的 num 成员值 (即10102)。(p+)-num:先得到 p-num 的值(即10101),然后使 p自加 1,指向 stu1。.指针 p只能指向一个结构体型数据(即 stu 数组的一个元素的起始地址),而不能指向一元素中的某一成员(即 p 的地址不能是成员的地址)。注意:以下赋值语句都是错
25、误的:p=&stu1.age;(不能指向数组元素的成员变量)p=&stu;(数组名本身就代表该数组的首地址,因此不能使用地址运算符&)363711.6指向结构体类型数据的指针指向结构体类型数据的指针三、用指向结构体的指针作函数参数1、用结构体变量的成员作参数(值传递)2、用指向结构体变量(或数组)的指针作实参(地址传递)例10-6有一个结构体变量stu内含学生学号、姓名和三门课的成绩。要求在main函数中赋值,在另一函数print 中将它们输出。373811.6指向结构体类型数据的指针指向结构体类型数据的指针#include string.h#define format%dn%sn%f n%f
26、 n%f n struct student int num;char name20;float score3;main()void print();struct student stu;stu.num=12345;strcpy(stu.name,Li Lin);stu.score0=67.5;stu.score1=89;stu.score2=78.6;print(&stu);void print(struct studnt*p)printf(format,p-num,p-name,p-score0,p-score1,p-score2);printf(n);P num name score sc
27、ore0 score1 score212345 LiLi 67.5 89 78.6 stu383911.6指向结构体类型数据的指针指向结构体类型数据的指针 其中 main 函数中最后一行调用 print 函数,也可改用print(stu);即实参改用结构体变量(而不是指针)。即void print(struct studnt*p)改为:void print(struct studnt stud)同时 print 函数也应相应改为:printf(format,stud.num,stud.name,stud.score0,stud.score1,stud.score2);printf(n);394
28、011.7用指针处理链表用指针处理链表一、链表概述1、链表结构是一种动态结构,而数组是静态结构;链表中相邻元素 (结点)物理地址不一定连续,而数组中相邻元素的物理地址连续。2、动态分配、释放函数 stdlib.h void*malloc(int size)calloc(int n,int size)free(ptr)3、关于单向链表的常用术语(1)“头指针”变量 head 指向链表的起始结点;(2)结点 链表中的每一个元素;(3)“表尾”它的地址部分放一个“Null”(空地址);1249A 1356B 1475C 1021D Nullhead1249135614751021404111.7用指
29、针处理链表用指针处理链表二、建立链表1、建立有5个学生数据的单向链表 开辟一个新结点,使 p1,p2指向它 读入一个学生的数据给 p1 所指的结点 当读入的 p1-num 不为 0 时,做:n=n+1 如果 n=1 则:head=p1 /*把 p1所指的结点作为第一个结点*/否则:p2-next=p1 /*把 p1所指的结点连接到表尾*/p2=p1 /*p2移到表尾*/head=NULL,n=08910189.5P1P2(n=1)414211.7用指针处理链表用指针处理链表 再开辟一个新结点,使 p1 指向它 读入一个学生数据给 p1 所指结点 尾结点的指针变量 置 NULL算法的思路是:让
30、p1指向新开的结点,p2 指向链表中最后一个结点,把 p1 所指的结点连接在 p2 所指的结点后面,用p2-next=p1 来实现#define NULL 0#define LEN sizeof(struct student)struct student long num;float score;struct student*next;int n;8910189.58910390headP2(n=2)4243struct student*creat()/*此creat函数带回一个链表起始 地址*/struct student*head,*p1,*p2;int n;n=0;p1=p2=(stru
31、ct student*)malloc(LEN);/*开辟一个新单元*/scanf(%ld,%f,&p1-num,&p1-score);head=NULL;while(p1-num!=0)n+;if(n=1)head=p1;else p2-next=p1;p2=p1;/*malloc返回字符型指针*/p1=(struct student*)malloc(LEN);scanf(%ld,%f,&p1-num,&p1-score);p2-next=NULL;return(head);434411.7用指针处理链表用指针处理链表三、输出链表 p=head(使 p指向第一个结点),如果 p指向的不是尾结点
32、,则:输出 p所指向的结点 然后使 p后移指向下一个结点,再输出 直到 p指向链表的尾结点为止void print(struct student *head)struct student*p;printf(nNow,These%d records are:n,n);p=head;if(head!=NULL)do printf(%ld%5.1fn,p-num,p-score);p=p-next;while (p!=NULL);444511.7用指针处理链表用指针处理链表四、删除操作 删除操作包含两步:搜索:寻找符合条件的结点,并记下其前一结点位置;删除结点 处理方式:设两个指针变量p1为当前指针
33、,p2为前一结点指针若链表为非空,则:p1=head 454611.7用指针处理链表用指针处理链表当 num p1-num 且p1 指向结点不是尾结点,做:p2=p1 (p2 后移一个位置)p1=p1-next (p1 后移一个位置)若 p1 是要删的结点,则:若 p1 所指是头结点,则head=p1-next (删除头结点)否则 p2-next=p1-next (删除一个结点)464711.7用指针处理链表用指针处理链表struct student*del(struct student*head,long num)struct student*p1,*p2;if(head=NULL)prin
34、tf(nlist null!n);return NULL;p1=head;while(num!=p1-num&p1-next!=NULL)/*P1指向的不是所要找的结点,并且后面还有结点*/p2=p1;p1=p1-next;/*后移一个结点*/if(num=p1-num)/*找到了*/if(p1=head)head=p1-next;free(p1);/*若P1指向的是头结点,把第二个结点地址赋予head*/else p2-next=p1-next;free(p1);474811.7用指针处理链表用指针处理链表/*否则将下一结点地址赋给前一结点地址*/printf(%ldn,num);n=n-1
35、;return(head);else printf(%ld not been found!n,num);/*找不到该结点*/return(NULL);484911.7用指针处理链表用指针处理链表五、插入操作 将一个给定的数据插入到链表中,分三种情况:链表空;插入到头结点前;中间struct student*insert(struct student *head,struct student*stud)struct student *p0,*p1,*p2;p1=head;/*使p1指向第一个结点*/p0=stud;/*p0指向要插入的结点*/if (head=NULL)/*原来是空表*/head
36、=p0;p0-next=NULL;/*使 p0 指向的结点作为第一个结点*/495011.7用指针处理链表用指针处理链表else while(p0-num p1-num)&(p1-next!=NULL)p2=p1;p1=p1-next;/*p2 指向刚才 p1 指向的结点,p1 后移一个结点*/if(p0-num num)if(head=p1)/*插到原来第一结点之前*/head=p0;p0-next=p1;else p2-next=p0;/*插入p2指向的结点之后*/p0-next=p1;505111.7用指针处理链表用指针处理链表else p1-next=p0;/*插到最后的结点之后*/p
37、0-next=NULL;n+;/*结点数加1*/return(head);515211.8共共 用用 体体一、共用体的定义 所谓“共用体”类型,是指使几个不同的变量共同占用同一段内存的数据类型。(1)直接定义共用体变量,其一般形式为:union 类型标识符1 成员名1;类型标识符2 成员名2;.类型标识符n 成员名n;变量名表;525311.8共共 用用 体体(2)先定义共用体类型标识符,再定义变量。一般形式为:union 共用体类型标识符 类型标识符1 成员名1;类型标识符2 成员名2;.类型标识符n 成员名n;union 共用体类型标识符 变量名表;535411.8共共 用用 体体二、共用
38、体的引用 共用体变量成员名例如:定义了如下的共用体变量union var_type int i;float x;char c;comm;引用情况举例:comm.i=5;comm.x=5.5;comm.c=a;printf(“%c”,comm.c);545511.8共共 用用 体体二、共用体类型数据的特点 1、共用体变量占内存等于最长的成员的长度,即不同成员共用同一内存,例:变量comm的长度为;结构体变量占内存是各成员长度之和,即不同成员具有各自内存。、只有最后一个存放的成员的值有效,其他成员将失去原值。例如,comm.i=5;comm.x=5.5;comm.c=a;只有comm.c的值有效3
39、、共用体变量的地址与各成员地址相同;4、不能对共用体变量名赋值,也不能引用变量名来得到成员的值,又不能在定义共用体时对它初始化;5、不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针;6、共用体类型可以出现在结构体类型定义中,也可以定义共用体数组;555611.9枚举类型枚举类型 所谓“枚举”,是指将变量的所有取值一 一列举出来,该变量称之为枚举型变量。所列举的值叫做枚举元素(枚举常量)。一、类型定义 enum 类型名 枚举元素表(标识符);如:enum weekday sun,mon,tue,wed,thu,fri,sat;二、变量定义:可直接定义或分开
40、定义.如:enum weekday workday,week_end;或:enum sun,mon,tue,wed,thu,fri,sat workday,week_end;565711.9枚举类型枚举类型三、说明1、枚举元素是常量,不能对其赋值.2、枚举元素是有值的,C语言编译按定义时的顺序使它们的值为:0,1,2.,其值可以输出.如:printf(“%d”,mon);则输出整数 13、枚举元素的值也可由程序员指定.如:enum weekday sun=7,mon=1,tue,wed,thu,fri,sat;则:tue=2,sat=64、枚举值可以用来作判断比较 如:if(workday=m
41、on)if(workday sun)比较规则:按其在定义时的顺序号比较。如果定义时 未人为指定,则第一个枚举元素的值认作 0。575811.9枚举类型枚举类型5、整数不能直接赋给枚举变量.如:workday=2;是错的 它们是不同的类型,应先用强制类型转换后才能赋值 如:workday=(enum weekday)2;相当于将顺序号为2的枚举元素赋给 workday,相当于:workday=tue;585911.9枚举类型枚举类型例:口袋中有红、黄、蓝、白、黑五色球若干个。每次从口袋中取 出 3 个不同色球,有几种取法n=0i 从 red 变到 blackj从 red 变到 black输出取法
42、的总数n i j 真 假k 从 red 变到 black ki 和 kj真 假 输出一种取法 n=n+1 596011.9枚举类型枚举类型main()enum color red,yellow,blue,white,black;enum color j,k,l,pri;int n=0,loop;for(j=red;j=black;j+)for(k=red;k=black;k+)if(j!=k)for(l=red;l=black;l+)if(l!=j&l!=k)n+;printf(%-4d,n);for(loop=1;loop=3;loop+)switch(loop)case 1:pr1=j;b
43、reak;case 2:pr1=k;break;case 3:pr1=l;break;default:break;606111.9枚举类型枚举类型 switch(pri)case red :printf(%-10s,red);break;case yellow:printf(%-10s,yellow);break;case blue :printf(%-10s,blue);break;case white :printf(%-10s,white);break;case black :printf(%-10s,black);break;default :break;printf(n);print
44、f(ntotal:%5dn,n);616211.10用用typedef定义类型定义类型 typedef int ARR100;(定义 ARR 为整型数组类型)ARR a,b,c;(定义 a,b,c 为整型数组变量)typedef char *STRING;(定义 STRING 为字符指针类型)STRING p,s10;(p为字符指针变量,s为字符指针数组)typedef int (*POINTER)();(定义 POINTER为指向函数的指针类型,该函数返回整型值)POINTER p1,p2;(p1、p2为POINTER类型的指针变量)归纳起来,定义新类型名的方法:1.先按定义的方法写出定义体
45、(如:int i)2.将变量名换成新类型名(如:将i换成COUNT);3.在最前面加 typedef(如:typedef int COUNT);4.最后可以用新类型名去定义变量;626311.10用用typedef定义类型定义类型 可采用typedef定义一个新的类型标识符来代替已有的类型标识符。一般形式为:typedef 原类型 新类型例如,使用INTEGER代表int类型:typedef int INTEGER;INTEGER i,j,k;使用REAL代表float类型:typedef float REAL;REAL x,y,z;使用DATE代表下面结构类型:typedef struct
46、int month;int day;int yeay;DATE;636411.10用用typedef定义类型定义类型 说明:1.用typedef可以定义各种类型名,但不能用来定义变量。2.用 typedef只是对已经存在的类型增加一个类型名,而没有 创造新的类型。3.typedef和#define有相似之处,如:typedef int COUNT 和#define COUNT int 两者的作用都是用COUNT代表 int。但#define是在预处理时处理,只能作简单字符替换 而typedef是在编译时处理,不是简单的字符替换4.当不同源文件中用到同一类型数据时,常用 typedef定义一些数据类型,把它们单独放在一个文件中,在需要用到它们的文件中用#include 命令把它们包含进来。5.使用 typedef有利于程序的通用与移植。6465小小 结结l1、结构体类型的定义,结构体变量的定义、引用;l2、结构体与数组;l3、结构体与指针;l4、用指针处理链表;l5、共用体;l6、枚举类型;l7、用 typedef 定义类型。l重点:结构体变量及结构体数组的引用,用指针处理链表。6566作作 业业l书面作业P296 11.3、11.8、11.10、11.12 l上机作业P255 实验十l课外上机作业本章的所有例题、习题66