资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第7章结构体与其他构造数据类型,C语言程序设计,周桂红,第7章结构体与其他构造数据类型C语言程序设计,主要内容,结构体,结构体数组的定义和引用,指向结构体的指针,结构体与函数,复杂的结构体,链表,共用体,枚举类型,类型定义typedef,小结,主要内容结构体,第7章,结构体与其他构造数据类型,7.1,结构体,结构体是,一种,构造,数据类型,用途:把,不同类型,的数据组合成一个整体-,自定义,数据类型,结构体类型声明:,一般形式为:,struct,结构体名,类型标识符 成员名;,类型标识符 成员名;,.,;,成员类型可以是,基本型或构造型,struct,是,关键字,不能省略,合法标识符,第7章结构体与其他构造数据类型7.1 结构体struct,例,struct,student,int inum;,char cname20;,char csex;,int iage;,float fscore;,char caddr30;,;,cname,inum,csex,iage,fscore,caddr,2,字节,2,字节,20,字节,1,字节,4,字节,30,字节,.,结构体类型声明描述结构,的组织形式,不分配内存,例 struct studentcnameinum,例 struct student,int inum;,char cname20;,char csex;,int iage;,float fscore;,char caddr30;,;,struct student,stu1,stu2;,2,结构体变量的定义,先声明结构体类型,再定义结构体变量,一般形式:,struct,结构体名,类型标识符 成员名;,类型标识符 成员名;,.,;,struct,结构体名,变量名表列,;,例#define,STUDENT,struct student,STUDENT,int inum;,char cname20;,char csex;,int iage;,float fscore;,char caddr30;,;,STUDENT,stu1,stu2;,例 struct student2 结构体变量的定,声明结构体类型的同时定义结构体变量,一般形式:,struct,结构体名,类型标识符 成员名;,类型标识符 成员名;,.,变量名表列,;,例 struct student,int inum;,char cname20;,char csex;,int iage;,float fscore;,char caddr30;,stu1,stu2;,声明结构体类型的同时定义结构体变量struct 结构,直接定义结构体变量,一般形式:,struct,类型标识符 成员名;,类型标识符 成员名;,.,变量名表列,;,例 struct,int inum;,char cname20;,char csex;,int iage;,float fscore;,char caddr30;,stu1,stu2;,用,无名结构体,直接定义,变量,只能一次,直接定义结构体变量struct例 struct 用无名,说明,结构体声明与结构体变量定义概念不同,类型:不分配内存,;,变量:分配内存,类型:不能赋值、存取、运算,;,变量:可以,结构体可嵌套,结构体成员名与程序中变量名可相同,不会混淆,结构体类型变量的作用域与生存期,与变量的完全相同,例 struct date,int imonth;,int iday;,int iyear;,;,struct student,int inum;,char cname20;,struct date birthday,;,stu;,inum,cname,birthday,imonth,iday,iyear,例 struct student,int inum;,char cname20;,struct date,int imonth;,int iday;,int iyear;,birthday;,stu;,inum,cname,birthday,imonth,iday,iyear,说明例 struct dateinumcnamebirth,3,结构体变量的引用,引用规则,结构体变量,不能整体引用,只能引用变量,成员,可以将一个结,构体变量赋值给另一个结构体变量,结构体嵌套时,逐级引用,成员(分量)运算符,优先级:,1,结合性:,从左向右,引用方式:,结构体变量名,.,成员名,例 struct student,int num;,char name20;,char sex;,int age;,float score;,char addr30;,stu1,stu2;,stu1.num=10;,stu1.score=85.5;,stu1.score+=stu2.score;,stu1.age+;,例 struct student,int num;,char name20;,char sex;,int age;,float score;,char addr30;,stu1,stu2;,printf(“%d,%s,%c,%d,%f,%sn”,stu1,);(,),stu1=101,“Wan Lin”,M,19,87.5,“DaLian”;(,),例 struct student,int num;,char name20;,char sex;,int age;,float score;,char addr30;,stu1,stu2;,stu2=stu1;(),例 struct student,int num;,char name20;,struct date,int month;,int day;,int year;,birthday;,stu1,stu2;,num,name,birthday,month,day,year,stu1.birthday.month=12;,例 struct student,int num;,char name20;,char sex;,int age;,float score;,char addr30;,stu1,stu2;,if(,stu1=stu2,),.(,),3 结构体变量的引用可以将一个结构体变量赋值给另一个结构体变,4,结构体变量的初始化,形式一:,struct,结构体名,类型标识符 成员名;,类型标识符 成员名;,.,;,struct,结构体名,结构体变量,=初始数据;,例 struct student,int inum;,char cname20;,char csex;,int iage;,char caddr30;,;,struct student stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;,4 结构体变量的初始化struct 结构体名例,形式二:,struct,结构体名,类型标识符 成员名;,类型标识符 成员名;,.,结构体变量,=初始数据;,例 struct student,int num;,char name20;,char sex;,int age;,char addr30;,stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;,形式二:struct 结构体名例 struct,形式三:,struct,类型标识符 成员名;,类型标识符 成员名;,.,结构体变量,=初始数据;,例 struct,int num;,char name20;,char sex;,int age;,char addr30;,stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;,形式三:struct例 struct,7.2,结构体数组,结构体数组的定义,三种形式:,形式一:,struct student,int inum;,char cname20;,char csex;,int iage;,;,struct student stu2;,形式二:,struct student,int inum;,char cname20;,char csex;,int iage;,stu2;,形式三:,struct,int inum;,char cname20;,char csex;,int iage;,stu2;,inum,cname,csex,iage,inum,cname,csex,iage,stu0,stu1,25B,7.2 结构体数组形式一:形式二:形式三:inumcna,结构体数组初始化,例 struct,int num;,char name20;,char sex;,int age;,stu=,;,顺序初始化:,struct student,int num;,char name20;,char sex;,int age;,;,struct student stu=100,“Wang Lin”,M,20,101,“Li Gang”,M,19,110,“Liu Yan”,F,19;,例 struct student,int num;,char name20;,char sex;,int age;,stu=,;,分行初始化:,struct student,int num;,char name20;,char sex;,int age;,;,struct student stu=100,“Wang Lin”,M,20,101,“Li Gang”,M,19,110,“Liu Yan”,F,19;,全部初始化时维数可省,结构体数组引用,引用方式:,结构体数组名下标,.,成员名,struct student,int num;,char name20;,char sex;,int age;,str3;,stu1.age,+;,strcpy(,stu0.name,”ZhaoDa”);,结构体数组初始化例 struct 顺序初始化:例 str,例 统计后选人选票 ch7_1.c,struct person,char cname20;,int icount;,leader3=“Li”,0,“Zhang”,0,”Wang“,0;,void main(),int ii,ij;char cleader_name20;,for(ii=1;ii=10;ii+),scanf(%s,cleader_name);,for(ij=0;ij3;ij+),if,(strcmp,(cleader_name,ame)=0),cleaderij.icount+;,for(ii=0;ii,成员名,结构体变量名.,成员名,指向运算符,优先级:1,结合方向:从左向右,例 指向结构体的指针变量,void main(),struct student,long int num;,char name20;,char sex;,float score;,stu_1,*p;,p=,stu_1.num=89101;,strcpy(stu_1.name,Li Lin);,p-sex=M;,p-score=89.5;,printf(nNo:%ldnname:%snsex:%cnscore:%fn,(*p).num,p-name,stu_1.sex,p-score,);,/*ch7_2.c*/,例 int n;,int *p=,*p,=10;,n,=10,struct student stu1;,struct student *p=,stu1.num,=101,;,(*p).num,=101,7.3 结构体和指针使用结构体指针变量引用成员形式存放结构体,指向结构体数组的指针,例 指向结构体数组的指针 ch7_3.c,struct student,int num;,char name20;,char sex;,int age;,stu3=10101,Li Lin,M,18,10102,Zhang Fun
展开阅读全文