理学第11章结构体与共用体.pptx
《理学第11章结构体与共用体.pptx》由会员分享,可在线阅读,更多相关《理学第11章结构体与共用体.pptx(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C程序可将上述数据的集合定义为一种结构体类型:struct student int num;char name20;char sex;int age;float score;char addr30;第第1页页/共共69页页上述定义中:struct 关键词(保留字),表示定义一种结构体类型。strudent 结构体名结构体定义的一般形式:struct 结构体名 成员表列;成员表列:类型标识符 成员名 以上仅说明了定义一种类型的方法,尚未定义变量。第第2页页/共共69页页如:如:struct exp int times;char flag;float meter;结构体名成员表列第第3页页/共共6
2、9页页11.2 定义结构体变量定义结构体变量第第4页页/共共69页页一、先定义结构体类型再定义结构体变量一、先定义结构体类型再定义结构体变量三种方法可用来定义结构体变量:则 x1,x2为student 结构型变量,x1,x2可存放student类型数据。struct student int num;char name20;char sex;int age;float score;char addr30;struct student x1,x2;类型标识符第第5页页/共共69页页struct student int num;char name20;char sex;int age;char ad
3、dr30;x1,x2;定义形式 struct 结构体名成员表列 变量名表列;二、二、在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量:第第6页页/共共69页页定义形式 struct 成员表列 变量名表列;不出现结构体类型名三、直接定义结构类型变量三、直接定义结构类型变量struct int num char name20;char sex;int age;char addr30;x1,x2;第第7页页/共共69页页 1.类型名与变量名是不同的概念 2.允许成员名又为另一个已定义的结构型变量 3.每一个成员地位如同该类型的变量 4.成员名与程序中的变量名可相同但意义不同几点说明几点说
4、明:第第8页页/共共69页页一个嵌套定义的例子:struct date int month;int day;int year;struct student int num;char name20;char sex;int age;struct date birthday;char addr30;x1,x2;x1或x2num name sex agebirthdaymonth dayyearaddr第第9页页/共共69页页11.3 11.3 结构体类型变量的引用结构体类型变量的引用第第10页页/共共69页页 如:x1为student型变量,则 x1.num:表示x1的学号 x1.name:表示x
5、1的名字 x1.birthday.day:表示x1的出生日 1.只能用成员,不可用结构体变量名直接运算2.每一个分量的引用与其同类型的简单变量的引用相同。引用结构体变量实质上为引用其成员,引引用结构体变量实质上为引用其成员,引用成员采用分量运算符用成员采用分量运算符“.”,其,其优先级最高。优先级最高。第第11页页/共共69页页11.4 结构体变量的初始化结构体变量的初始化 struct student x1=8906,Li Ming,M,25,8,3,1928,“Textile Road 1 与其它变量的初始化完全一样,结构体变量在定义时可初始化:第第12页页/共共69页页关于结构体变量的几
6、点说明:关于结构体变量的几点说明:关于结构体变量的几点说明:关于结构体变量的几点说明:1.结构体变量不是一个简单变量,它的值是由许多个基本数据组成。2.在内存中占有一段连续的存储单元第第13页页/共共69页页3.占有的连续存储单元大小取决于成员的数据类型如:如:struct exp int a;float b;char yn8;struct exp x=1234,56.7,text第第14页页/共共69页页 若 x 的起始地址为2000,则 x 在内存中占有的存储单元为:共用14个字节的连续单元123456.7test0ab2000200220062013yn8第第15页页/共共69页页4.结
7、构体定义和变量定义及初始化可二合为一:struct exp int a;float b;char yn8;x=1234,56.7,test;但不能这样写:但不能这样写:struct exp int a=1234;float b=56.7;char yn8=test;x;第第16页页/共共69页页5.要注意结构体变量的输入/输出.若有struct student h;则:scanf(%s,&h);printf(%s,h);错误原因:原因:结构体变量中包含有多个不同类型的数据项。正确方法正确方法:对结构体变量各成员的值进行输入/输出。如:如:scanf(%d%s,&h.num,h.name);pr
8、intf(%d%s,h.num,h.name);第第17页页/共共69页页11.5 11.5 结构体数组结构体数组第第18页页/共共69页页同结构体变量定义类似:struct student w3;w0.num:表示w0的学号 w1.name:表示w1的姓名对w数组也可初始化:struct student w3=8901,Li Ming,;则有三个元素w0,w1,w2.每一个元素为一个结构student型变量。结构体类型标识符第第19页页/共共69页页可省略大小说明,直接用赋初值确定其大小 struct student w=,;例11.2:有三个侯选人,每一侯选人的数据包括其姓名和得票数,则可
9、定义结构类型person和结构数组leader第第20页页/共共69页页struct person char name20;int count;leader3=“Li”,0,“Zhang”,0,“Hang”,0;main()int i,j;char leader_name20;for(i=1;i=10;i+)scanf(%s,leader_name);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)leaderj.count+;printf(n);for(i=0;i3;i+)printf(%5s:%dn,leaderi.name,lead
10、eri.count);第第21页页/共共69页页 Li Li Hang Zhang Zhang Hang Li Hang Zhang Li 输入:输入:运行情况如下:运行情况如下:count name LiZhangHang 0 0 0 Li:4 Zhang:3 Hang:3显示:第第22页页/共共69页页11.6 11.6 结构指针结构指针 结构指针:结构指针:指向结构型变量的起始地址指向结构型变量的起始地址.第第23页页/共共69页页一、结构指针变量一、结构指针变量 例例:struct student char name 10;char sex;int age;float score;ch
11、ar addr20;x1;第第24页页/共共69页页则p为结构指针变量,它可用来存放student型变量的地址numnameaddrpx1令p=&x1;则 p为x1的首地址.struct student p;第第25页页/共共69页页(p).name(p).score 或者用“”运算符,p num,pname,p score。称“”为指向运算符,“”优先级高于+,。则:pnum+(x1.num)+pnum+(x1.num)先使用x1.num,再加1先使x1.num加1,再用x1.num访问x1的成员:第第26页页/共共69页页 小结:小结:引用结构变量中的成员有三种方法:(2)用指针变量(p)
12、.成员名 (p).num(3)用指向运算符成员名 p num(1)结构体变量名.成员名 x1.num注意注意:指针变量p必须是结构指针型,且有p=&x1;第第27页页/共共69页页例:例:请指出下列程序的错误所在:struct person char name20;int count;x1=“ZhongHua”,10;main()int*p;p=&x1;printf(%sn%dn,(*p).name,(*p).count)错误的原因:p不是结构指针变量可改为:struct person*p例例11.03第第28页页/共共69页页二、指向结构体数组的指针二、指向结构体数组的指针 与指向数组的指针
13、一样,可用指针指向结构体数组。第第29页页/共共69页页struct student int num;char name20;char sex;int age;main()struct student stu3=10101,Li Lin,M,;struct student p;p=stu;while(pstu+3)printf(,pnum,p name,p sex,p age);例例11.04第第30页页/共共69页页内存结构如下:内存结构如下:注:注:p+1为指向下一个元素的首地址。stu0 p+1 p+2pstu1stu2第第31页页/共共69页页 用地址传送,函数中形参用指针变量,实参可
14、用 地址量或指针三、用指向结构体的指针作函数参数三、用指向结构体的指针作函数参数第第32页页/共共69页页struct person char name20;int count;x3=“zhao”,4,“qian”,3,“sun”,6;void prt(struct person*pp);main()int i;for(i=0;iname,pp-count);第第33页页/共共69页页运行结果:zhao,4qian,3sun,6第第34页页/共共69页页11.7 11.7 链表链表第第35页页/共共69页页1.什么是链表?什么是链表?解决了内存分配零乱的问题 解决了数组存放数据的弊端 是用指针
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 理学 11 结构 共用
限制150内