C语言程序设计实例教程(第2版)丁爱萍第10章 结构体和共用体.ppt

上传人:s****8 文档编号:69351602 上传时间:2023-01-02 格式:PPT 页数:95 大小:497KB
返回 下载 相关 举报
C语言程序设计实例教程(第2版)丁爱萍第10章 结构体和共用体.ppt_第1页
第1页 / 共95页
C语言程序设计实例教程(第2版)丁爱萍第10章 结构体和共用体.ppt_第2页
第2页 / 共95页
点击查看更多>>
资源描述

《C语言程序设计实例教程(第2版)丁爱萍第10章 结构体和共用体.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计实例教程(第2版)丁爱萍第10章 结构体和共用体.ppt(95页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第10章章 结构体和共用体结构体和共用体 第第10章章 结构体和共用体结构体和共用体 10.1 结构体类型结构体类型10.2 共用体共用体习题习题10第第10章章 结构体和共用体结构体和共用体 10.1 结构体类型结构体类型在C语言中,结构体(structure)类型是将若干个类型相同或不同的数据组合成一个有机的集合。例如,一个学生的记录需包括学号、姓名、性别、年龄和地址等成员。这样就可以将学号、姓名、性别、年龄和地址等成员组合起来定义为一个结构体变量,共同说明一个学生的信息。第第10章章 结构体和共用体结构体和共用体 10.1.1结构体类型定义并不是只有一种结构体类型,用户可以根据具体情况

2、,自己定义一种新的数据类型,只要结构体类型名不同,就是不同的数据类型。用户可以使用自己定义的或是他人提供的结构体类型来定义变量。使用结构体变量前,要先定义该结构体类型,再定义结构体变量,然后才能对结构体变量进行操作。结构体类型定义的一般格式为第第10章章 结构体和共用体结构体和共用体 struct结构体名类型标识符成员名列表;类型标识符成员名列表;类型标识符成员名列表;;第第10章章 结构体和共用体结构体和共用体 例如,定义一个结构体structstudent类型:structstudentintnum;/*学号*/charname20;/*姓名*/charsex;/*性别*/intage;/

3、*年龄*/floatscore;/*成绩*/charaddr30;/*地址*/;第第10章章 结构体和共用体结构体和共用体 其中,struct是关键字,不能省略。student是定义的结构体类型名。结构体中的每一项数据,称为结构体“成员”(member)或“分量”。注意,结构体中的成员也可以是某种结构体类型。“结构体”在大多数资料中被称为“结构”。10.1.2结构体变量的定义、引用和初始化1.结构体变量的定义结构体类型变量的定义与其他类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,因此,结构体类型变量的定义形式就增加了灵活性,共计有3种形式,分别介绍如下。第第10章章 结构

4、体和共用体结构体和共用体(1)先定义结构体类型,再定义结构体类型变量。例如:structstu/*定义学生结构体类型*/charname20;/*学生姓名*/charsex;/*性别*/longnum;/*学号*/floatscore3;/*三科考试成绩*/;structstustudent1,student2;/*定义结构体类型变量*/第第10章章 结构体和共用体结构体和共用体 首先定义了一种新的数据类型称为是structstu类型,或称为结构体stu类型。这种类型的变量共有4个成员(或分量)。然后定义了2个structstu类型的变量,分别是student1和student2。studen

5、t1和student2在内存中共占用37个字节的内存空间。其结构体变量的存储情况如图10.1所示。第第10章章 结构体和共用体结构体和共用体 图10.1结构体变量的存储情况第第10章章 结构体和共用体结构体和共用体(2)定义结构体类型的同时定义结构体类型变量。例如:structstudentintnum;/*学号*/charname20;/*姓名*/charsex;/*性别*/intage;/*年龄*/charaddr30;/*地址*/student1,student2;也可以再定义如下变量。structstudentstudent3;用此结构体类型,同样可以定义更多的该结构体类型变量。第第1

6、0章章 结构体和共用体结构体和共用体(3)直接定义结构体类型变量。例如:structcharname20;/*学生姓名*/charsex;/*性别*/longnum;/*学号*/floatscore3;/*三科考试成绩*/person1,person2;/*定义该结构体类型变量*/第第10章章 结构体和共用体结构体和共用体 用此方法虽然比较简洁,但是此法由于无法记录该结构体类型,因此除直接定义外,不能再定义该结构体类型变量。注意,在实际应用中经常会出现一个数组的成员是另一个结构体变量的情况,例如:structdate/*日期结构*/intmonth;/*月*/intday;/*日*/intye

7、ar;/*年*/;第第10章章 结构体和共用体结构体和共用体 structstudentintnum;/*学号*/charname20;/*姓名*/charsex;/*性别*/intage;/*年龄*/structdatebirthday;/*成员是另一个结构体变量*/charaddr30;/*地址*/student1,student2;第第10章章 结构体和共用体结构体和共用体 变量student1和student2的内部存储情况如图10.2所示。图10.2变量student1和student2的内部存储情况第第10章章 结构体和共用体结构体和共用体 2.结构体变量的引用在C语言中对结构体变

8、量进行操作时,除了可以对相同类型的结构体变量进行整体赋值外,不可以对一个结构体变量进行整体赋值。要对一个结构体变量进行操作,其引用的格式为结构体变量名.成员名“.”是“成员运算符”(分量运算符)。结构体变量的引用分3种情况。第第10章章 结构体和共用体结构体和共用体(1)一般情况下,不能将一个结构体变量作为整体来引用,只能引用其中的成员。若定义的结构体类型及变量如下。structdateintyear;intmonth;intday;time1,time2;则变量time1和time2各成员的引用形式为:time1.day,time1.month,time1.year及time2.day,ti

9、me2.month,time2.year,其变量time1的引用形式如图10.3所示。第第10章章 结构体和共用体结构体和共用体 图10.3变量time1的引用第第10章章 结构体和共用体结构体和共用体(2)当成员是另一个结构体变量时,应一级一级地引用成员。例如,定义了一个结构体类型student,其中有一个成员为结构体date类型。structdate/*日期结构*/intmonth;/*月*/intday;/*日*/intyear;/*年*/;第第10章章 结构体和共用体结构体和共用体 structstudentintnum;/*学号*/charname20;/*姓名*/charsex;/

10、*性别*/intage;/*年龄*/structdatebirthday;/*成员是另一个结构体变量*/charaddr30;/*地址*/student1,student2;第第10章章 结构体和共用体结构体和共用体 可以这样引用:student1.num;student1.name;student1.birthday.month;student1.birthday.day;student1.birthday.year;(3)仅在以下两种情况下,可以把结构体变量作为一个整体来访问。结构体变量整体赋值,例如:student2=student1;取结构体变量地址,例如:printf(%x,&stu

11、dent1);/*输出student1的地址*/第第10章章 结构体和共用体结构体和共用体【例10-1】定义一个学生的结构体变量,对其进行赋值后将其打印出来。#includestructstudentintsnum;charname10;charsex;intage;charaddr40;第第10章章 结构体和共用体结构体和共用体 main()structstudentstu1;printf(inputsnum:);scanf(%d,&stu1.snum);printf(inputname:);scanf(%s,stu1.name);printf(inputsex:);scanf(%c,&st

12、u1.sex);printf(inputage:);第第10章章 结构体和共用体结构体和共用体 scanf(%d,&stu1.age);printf(inputaddr:);scanf(%s,stu1.addr);printf(snum:%dnname:%snsex:%cn ,stu1.snum,stu1.name,stu1.sex);printf(age:%dnaddr:%sn,stu1.age,stu1.addr);第第10章章 结构体和共用体结构体和共用体 3.结构体变量的初始化由于结构体类型变量汇集了各类不同数据类型的成员,因此结构体类型变量的初始化就略显复杂。例如:定义一个结构体类型

13、变量student并初始化。structstu/*定义学生结构体类型*/charname20;/*学生姓名*/charsex;/*性别*/longnum;/*学号*/floatscore3;/*三科考试成绩*/;tructstustudent=liping,f,200301,98.5,97.4,95;第第10章章 结构体和共用体结构体和共用体 上述对结构体类型变量的3种定义形式均可在定义时初始化。结构体类型变量完成初始化后,即各成员 的 值 分 别 为:student.name=liping,student.sex=f,student.num=200301,student.score0=98.

14、5,student.score1=97.4和student.score2=95。与数组的初始化类似,结构体变量只能对外部和静态结构体变量初始化。初始化数据之间要用“,”隔开,不进行初始化的成员项要用“,”跳过。第第10章章 结构体和共用体结构体和共用体【例10-2】定义一个学生的结构体变量,对其初始化后并打印出来。#includestructstudentintsnum;charname10;charsex;intage;charaddr40;stu1=1001,Ma Jun,M,22,213 HuangheRoad;第第10章章 结构体和共用体结构体和共用体 main()printf(snu

15、m:%dnname:%snsex:%cn,stu1.snum,stu1.name,stu1.sex);printf(age:%dnaddr:%sn,stu1.age,stu1.addr);第第10章章 结构体和共用体结构体和共用体【例10-3】定义一个结构体变量,其结构如下,其中运算符为0表示无操作,为1表示加法,为2表示减法,为3表示乘法,为4表示除法。输入两个此种类型的结构体变量,按照运算符的类型进行运算。#includestructyunsuanfloatkey;intsing;第第10章章 结构体和共用体结构体和共用体 main()structyunsuannum1,num2;floa

16、tresult;printf(inputnum1:);scanf(%f,&num1.key);printf(inputsing:);scanf(%i,&num1.sing);printf(inputnum2:);scanf(%f,&num2.key);prinf(inputsing:);scanf(%i,&num2.sing);switch(num1.sing)第第10章章 结构体和共用体结构体和共用体 case0:printf(endn);break;case1:result=num1.key+num2.key;break;case2:result=num1.key-num2.key;bre

17、ak;case3:result=num1.key*num2.key;break;case4:result=num1.key/num2.key;break;default:printf(errorn);printf(%f,result);第第10章章 结构体和共用体结构体和共用体 10.1.3结构体数组结构体类型变量可以将不同类型的数据形成一个整体,解决数据库中的“记录”问题,如果要解决类似于“表”的问题就要使用结构体类型数组。1.结构体类型数组的定义定义结构体类型数组的方法和定义结构体类型变量的方法类似,共有3种方法同样适合于数组的定义,我们选择其中的一种方法,例如:第第10章章 结构体和共用

18、体结构体和共用体 structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;structstudentstu3;/*定义了一个有3个元素的结构体数组*/第第10章章 结构体和共用体结构体和共用体 示例中首先定义了结构体structstudent类型,然后用此类型定义了一个数组stu,数组中共有3个元素,每一个元素有6个成员(分量)。数组元素的引用类似于结构体类型变量的引用,例如stu0.num=10001等。2.结构体数组的初始化结构体数组的初始化,实际上是对数组每一个元素进行初始化,也就是对数组元素的每一个成员初始

19、化。例如:第第10章章 结构体和共用体结构体和共用体 structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu3=第第10章章 结构体和共用体结构体和共用体 10101,LiLin,M,18,87.5,103BejingRoad,10102,Zhang Fan,M,19,99,130 ShanghaiRoad,10104,WangMin,F,20,78.5,1010ZhongshanRoad;第第10章章 结构体和共用体结构体和共用体 3.结构体数组举例【例10-4】输入10个学生的信息,并将其打印出来。#i

20、ncludestructstudentintsnum;charname10;intage;charaddr40;第第10章章 结构体和共用体结构体和共用体 main()structstudentstu10;inti;for(i=0;i10;i+)printf(inputsnum:);scanf(%d,&stui.snum);printf(inputname:);scanf(%s,stui.name);printf(inputage:);scanf(%d,&stui.age);printf(inputaddr:);第第10章章 结构体和共用体结构体和共用体 scanf(%s,stui.addr)

21、;for(i=0;i10;i+)printf(snum:%dn name:%sn,stui.snum,stui.name);printf(age:%dn addr:%sn,stui.age,stui.addr);第第10章章 结构体和共用体结构体和共用体【例10-5】设某组有4个人,填写表10-1的登记表,除姓名、学号外,还有三科成绩,编程实现对表格的计算,要求解出每个人的三科平均成绩,输出成绩。第第10章章 结构体和共用体结构体和共用体 表10-1成绩登记表第第10章章 结构体和共用体结构体和共用体#includestdlib.h#includestdio.hstructstulongnum

22、ber;charname20;floatscore4;/*定义结构体structstu类型*/第第10章章 结构体和共用体结构体和共用体 main()voidinput();/*函数声明*/voidaver();voidoutput();structstustud4;/*定义结构体数组*/input(stud,4);/*调用函数输入数据*/aver(stud,4);/*调用函数计算每一个学生的平均成绩*/output(stud,4);/*调用函数输出结果*/第第10章章 结构体和共用体结构体和共用体 voidinput(structstuarr,intn)inti;floattemp;for(

23、i=0;in;i+)printf(InputNumber:);/*输入学号*/scanf(%ld,&arri.number);printf(InputName:);/*输入姓名*/scanf(%s,arri.name);printf(InputscoreofEnglish:);/*输入英语成绩*/第第10章章 结构体和共用体结构体和共用体 scanf(%f,&temp);arri.score0=temp;printf(InputscoreofMath:);/*输入数学成绩*/scanf(%f,&temp);arri.score1=temp;printf(InputscoreofPhysic:)

24、;/*输入物理成绩*/scanf(%f,&temp);arri.score2=temp;voidaver(structstuarr,intn)/*求每一个人平均成绩的函数*/第第10章章 结构体和共用体结构体和共用体 inti,j;for(i=0;in;i+)arri.score3=0;for(j=0;j3;j+)arri.score3=arri.score3+arri.scorej;arri.score3=arri.score3/3;第第10章章 结构体和共用体结构体和共用体 voidoutput(structstuarr,intn)/*输出函数*/inti,j;printf(*TABLE*

25、n);printf(-n);printf(|%8s|%10s|%7s|%7s|%7s|%7s|n,Number,Name,English,Math,Physics,Average);printf(-n);第第10章章 结构体和共用体结构体和共用体 for(i=0;in;i+)printf(|%8ld|%10s|,arri.number,arri.name);for(j=0;j”,例如p-num,p-name等,见图10.4。注意:指向结构体成员运算符由两个字符“-”和“”组成,而且此运算符的前面必须是指针,后面必须是结构体的成员。第第10章章 结构体和共用体结构体和共用体 2.指向结构体类型数

26、组的指针1)指向结构体类型数组的指针的定义定义结构体数组的指针和定义其他数组的指针的方法类似,例如:structstudentstu3;structstudent*p=stu;/*指向stu0*/定义了结构体类型的数组stu,共有3个成员,又定义了一个指向结构体类型的指针变量p,指针变量指向stu0,如图10.5所示。第第10章章 结构体和共用体结构体和共用体 图10.5指向结构体类型数组的指针第第10章章 结构体和共用体结构体和共用体 2)数组元素的引用如上所示,p是指向一维结构体数组的指针,对数组元素的引用可采用3种方法。(1)地址法。stu+i和p+i均表示数组第i个元素的地址,数组元素

27、各成员 的 引 用 形 式 为:(stu+i)-name,(stu+i)-num和(p+i)-name,(p+i)-num等。stu+i和p+i与&stui意义相同。(2)指针法。若p指向数组的某一个元素,则p+就指向其后续元素。第第10章章 结构体和共用体结构体和共用体(3)指针的数组表示法。若p=stu,我们说指针p指向数组stu,pi表示数组的第i个元素,其效果与stui等同。对数组成员的引用描述为:pi.name,pi.num等。【例10-6】改写例10-4,用结构指针实现输入10个学生的信息,并将其打印出来。#includestructstudentintsnum;charname1

28、0;intage;charaddr40;第第10章章 结构体和共用体结构体和共用体 main()structstudentstu10,*p;inti;p=stu;for(i=0;i10;i+)printf(inputsnum:);scanf(%d,&stui.snum);printf(inputname:);scanf(%s,stui.name);printf(inputage:);scanf(%d,&stui.age);printf(inputaddr:);scanf(%s,stui.addr);第第10章章 结构体和共用体结构体和共用体 for(i=0;isnum,p-name,p-sex

29、);printf(age:%dnaddr:%sn,p-age,p-addr);p+;第第10章章 结构体和共用体结构体和共用体 3.用结构体指针作参数时的传递在C语言中,可以通过传递结构体变量的成员及传递整个结构体变量或结构体数组的方法来传递数据,还可以通过结构体指针作为函数参数传递数据。【例10-7】设有5位学生,计算其3门课程的平均成绩。#includestructstudentintsnum;charname10;intyy;intyw;intshx;第第10章章 结构体和共用体结构体和共用体 floatavage(a,b,c)inta,b,c;floatave;ave=(a+b+c)/

30、3;return(ave);main()structstudentstu5;inti;floata;for(i=0;i5;i+)第第10章章 结构体和共用体结构体和共用体 printf(inputsnum:);scanf(%d,&stui.snum);printf(inputname:);scanf(%s,stui.name);printf(inputyy:);scanf(%d,&stui.yy);printf(inputyw:);scanf(%d,&stui.yw);printf(inputshx:);scanf(%d,&stui.shx);printf(the avage is:%f,av

31、age(stui.yy,stui.yw,stui.shx);第第10章章 结构体和共用体结构体和共用体【例10-8】输入10个用户的信息,调用函数将电话号码以398开头的电话改为以385开头。#include#definemax10structuserintunum;charuname10;chartel7;第第10章章 结构体和共用体结构体和共用体 voidchange(u)structuseru10;inti;for(i=0;i10;i+)if(ui.tel0=3)&(ui.tel1=9)&(ui.tel2=8)ui.tel1=8;ui.tel2=5;第第10章章 结构体和共用体结构体和共

32、用体 main()structuseruser110;inti;for(i=0;i10;i+)printf(inputunum:);scanf(%d,&user1i.unum);printf(inputname:);scanf(%s,user1i.uname);printf(inputtel:);scanf(%7s,user1i.tel);第第10章章 结构体和共用体结构体和共用体 change(user1);for(i=0;iscore,i=1;iscoremax)max=(p+i)-score;temp=i;第第10章章 结构体和共用体结构体和共用体 returntemp;main()st

33、ructstudentstu4;/*4个学生*/inti;floatscore;structstudent*p;inttemp=0;/*成绩最高学生在数组中的序号,03*/for(i=0;inum,p-name,p-score);第第10章章 结构体和共用体结构体和共用体 10.1.5结构体变量链表如果在一个结构体成员中又引用了自身的结构体类型,则会产生递归定义。链表就是利用递归定义,使得由第一个结构体变量可以找到第二个结构体变量,即如果知道链表的首地址,就可以获得整个链表。由于链表的每一个节点的物理位置不是固定的,因此需要以下函数来动态地分配空间及释放空间。(1)malloc(size):动

34、态申请一个长度为size的连续空间,此函数返回一个指针,指向该空间的起始地址,如果错误则返回0。(2)free(ptr):释放ptr所指向的内存区。第第10章章 结构体和共用体结构体和共用体【例10-10】建立一个链表。#include#definesizesizeof(structexample)structexampleintkey;structexample*next;structexample*creat()第第10章章 结构体和共用体结构体和共用体 structexample*head,*p1,*p2;head=(structexample*)malloc(size);p2=head

35、;head-key=0;p1=(structexample*)malloc(size);printf(inputthekey:);scanf(%d,&p1-key);while(p1-key!=0)第第10章章 结构体和共用体结构体和共用体 p2-next=p1;p1-next=NULL;p2=p1;(head-key)+;p1=(structexample*)malloc(size);printf(inputthekey:);scanf(%d,&p1-key);return(head);第第10章章 结构体和共用体结构体和共用体【例10-11】对上例中的链表进行遍历。voidprint(he

36、ad)structexample*head;structexample*p;inti;printf(thereare%drecordsare:n,head-key);p=head;i=1;while(p-next!=NULL)p=p-next;printf(the%drecordis:%dn,i,p-key);i+;第第10章章 结构体和共用体结构体和共用体【例10-12】删除例10-10链表中的一个节点。structexample*delete(head,num)structexample*head;intnum;structexample*p1,*p2;inti;i=0;p1=head;w

37、hile(p1-next!=NULL)第第10章章 结构体和共用体结构体和共用体 p2=p1-next;if(p2-key=num)p1-next=p2-next;(head-key)-;p1=p2;i+;elsep1=p2;printf(deleted%dnotesn,i);return(head);第第10章章 结构体和共用体结构体和共用体【例10-13】在例10-10链表中插入一个节点。structexample*insert(head,num)structexample*head;intnum;structexample*p1,*p2,*p;p=(structexample*)mall

38、oc(size);p-key=num;p1=head;p2=p1-next;while(p2-keynext;p-next=p2;p1-next=p;(head-key)+;return(head);第第10章章 结构体和共用体结构体和共用体 将以上程序组合起来即可完成对链表的操作,程序如下:main()structexample*head1;intdata;head1=creat();print(head1);printf(inputthenoteyouwanttodel:);scanf(%d,&data);第第10章章 结构体和共用体结构体和共用体 head1=delete(head1,d

39、ata);print(head1);printf(inputthenoteyouwanttoinsert:);scanf(%d,&data);head1=inserte(head1,data);print(head1);第第10章章 结构体和共用体结构体和共用体 10.2 共用体共用体10.2.1共用体的定义共用体类型的定义与结构体类型的定义类似。定义共用体的一般格式为union共用体名类型标识符成员名列表;类型标识符成员名列表;类型标识符成员名列表;变量列表;第第10章章 结构体和共用体结构体和共用体 共用体变量所占内存的长度是成员中最长的长度,在这样一个空间中可以存放不同类型和不同长度的数

40、据,而这些数据都是以同一地址开始存放的。例如,定义一个共用体,其中包括整型、字符型和实型变量,这3种数据类型的成员共享同一块内存空间。unionunidatainti;charch;floatf;s1;变量s1为共用体uniondata型,它在内存中的存储情况如图10.6所示。第第10章章 结构体和共用体结构体和共用体 第第10章章 结构体和共用体结构体和共用体 从图中可以看出共用体变量的成员占用同一块内存,共用体变量各成员占相同的起始地址,所占内存长度等于最长的成员所占内存。结构体变量各成员占不同的地址,所占内存长度等于全部成员所占内存之和。由于在该共用体类型中实型变量占有内存单元4个字节,

41、是最长的成员,因此共用体变量s1分配4个字节的内存单元。第第10章章 结构体和共用体结构体和共用体 10.2.2共用体变量的定义和引用引用共用体变量的成员的用法与结构体完全相同,即使用运算符“.”和“-”。例如,若定义共用体类型为uniondata/*共用体*/inta;floatb;doublec;chard;mm;其成员引用为mm.a,mm.b,mm.c,mm.d。第第10章章 结构体和共用体结构体和共用体 在使用共用体变量时,要注意:(1)在程序执行的某一时刻,只有一个共用体成员起作用,而其他的成员不起作用。(2)两个具有相同共用体类型的变量可以互相赋值。(3)可以对共用体变量进行取地址

42、运算。第第10章章 结构体和共用体结构体和共用体【例10-14】定义一个共用体类型data,并用此共用体类型定义一个变量mm,然后引用共用体变量。#includestdio.hmain()uniondatainta;floatb;doublec;chard;mm;第第10章章 结构体和共用体结构体和共用体 mm.a=6;printf(%dn,mm.a);mm.c=67.2;printf(%5.1lfn,mm.c);mm.d=W;mm.b=34.2;printf(%5.1f,%cn,mm.b,mm.d);程序最后一行的输出是我们无法预料的。其原因是连续做“mm.d=W;mm.b=34.2;”两个

43、连续的赋值语句最终使共用体变量的成员mm.b所占4字节被写入34.2,而写入的字符被覆盖了,输出的字符变成了符号“=”。字符的输出是无法得知的,由写入内存的数据决定。第第10章章 结构体和共用体结构体和共用体【例10-15】定义一个共用体变量,根据标识符的值确定共用体的取值。#includestructdataunioninti;charch;floatf;key;第第10章章 结构体和共用体结构体和共用体 inttype;main()structdatad;printf(inputtype:);scanf(%d,&d.type);d.key.i=65;switch(d.type)第第10章章

44、 结构体和共用体结构体和共用体 case0:printf(theintis:%dn,d.key.i);break;case1:printf(thecharis:%cn,d.key.ch);break;case2:printf(thefloatis:%fn,d.key.f);break;default:printf(nodata);第第10章章 结构体和共用体结构体和共用体 10.2.3共用体类型数据的特点共用体类型数据有以下两个特点。(1)共用体变量中的值是最后一次存放的成员的值,例如:s1.i=1;s1.ch=a;s1.f=1.5;完成以上3个赋值语句后,共用体变量的值是1.5,而s1.i=

45、1和s1.ch=a已无意义。第第10章章 结构体和共用体结构体和共用体(2)共用体变量不能初始化,例如:uniondatainti;charch;floatf;a=1,a,1.5;第第10章章 结构体和共用体结构体和共用体 在使用共用体类型变量时一定要注意:因为变量的成员共同占用一段内存空间,所以在操作时要小心,以免造成数据的覆盖。共用体的应用范围比较窄,一般情况下,多个数据使用同一内存空间时使用共用体。例如,汉字的内码占用两个字节,英文字符的ASCII码占用一个字节,在接收汉字或英文字符时可以使用共用体变量来处理接收的是汉字或字符。第第10章章 结构体和共用体结构体和共用体 习题习题1010.1定义一结构体变量表示点坐标,并输入两点坐标,求两点之间的距离。10.2定义一结构体数组表示分数,并求两个分数相加之和。10.3利用指针变量实现队列的入队操作。10.4编写一子程序,将一链表倒序,使链表表尾变表头,表头变表尾。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁