![C语言结构体和联合体_第1页](http://file4.renrendoc.com/view/bf7f656b5fe6bcd9edfc2f024bee3c59/bf7f656b5fe6bcd9edfc2f024bee3c591.gif)
![C语言结构体和联合体_第2页](http://file4.renrendoc.com/view/bf7f656b5fe6bcd9edfc2f024bee3c59/bf7f656b5fe6bcd9edfc2f024bee3c592.gif)
![C语言结构体和联合体_第3页](http://file4.renrendoc.com/view/bf7f656b5fe6bcd9edfc2f024bee3c59/bf7f656b5fe6bcd9edfc2f024bee3c593.gif)
![C语言结构体和联合体_第4页](http://file4.renrendoc.com/view/bf7f656b5fe6bcd9edfc2f024bee3c59/bf7f656b5fe6bcd9edfc2f024bee3c594.gif)
![C语言结构体和联合体_第5页](http://file4.renrendoc.com/view/bf7f656b5fe6bcd9edfc2f024bee3c59/bf7f656b5fe6bcd9edfc2f024bee3c595.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言基础结构体和联合体学习目标掌握结构体和联合体的基本使用掌握结构体和联合体的区别了解两者嵌套概述C中,结构也是一种数据类型,可以使用结构变量,因此,象其它类型的变量一样,在使用结构变量时要先对其定义。定义结构变量的一般格式为:
struct结构名
{类型变量名;类型变量名;
...
}结构变量;结构体类型变量结构名是结构的标识符不是变量名。类型为第二节中所讲述的五种数据类型(整型、浮点型、字符型、指针型和无值型)。构成结构的每一个类型变量称为结构成员,它象数组的元素一样,但数组中元素是以下标来访问的,而结构是按变量名字来访问成员的。下面举一个例子来说明怎样定义结构变量:结构体示例numnamesexageaddr10968Peter.Jman26wuxistructstudent{ intnum; charname[20]; charsex; intage; charaddr[30];};结构体类型变量structstring{charname[8];intage;charsex[2];chardepart[20];floatwage1,wage2,wage3,wage4,wage5;}person;或structstring{charname[8];intage;charsex[2];chardepart[20];floatwage1,wage2,wage3,wage4,wage5;};structstringperson;结构体类型变量如果需要定义多个具有相同形式的结构变量时用这种方法比较方便,它先作结构说明,再用结构名来定义变量。例如:
structstringTianyr,Liuqi,...;
如果省略结构名,则称之为无名结构,这种情况常常出现在函数内部,用这种结构时前面的例子变成:
struct{charname[8];intage;charsex[2];chardepart[20];floatwage1,wage2,wage3,wage4,wage5;}Tianyr,Liuqi;结构体变量引用结构是一个新的数据类型,因此结构变量也可以象其它类型的变量一样赋值、运算,不同的是结构变量以成员作为基本变量。结构成员的表示方式为:结构变量.成员名如果将"结构变量.成员名"看成一个整体,则这个整体的数据类型与结构中该成员的数据类型相同,这样就可象前面所讲的变量那样使用。下面这个例子定义了一个结构变量,其中每个成员都从键盘接收数据,然后对结构中的浮点数求和,并显示运算结果,同时将数据以文本方式存入一个名为wage.dat的磁盘文件中。请注意这个例子中不同结构成员的访问。#include<stdio.h>main(){struct{/*定义一个结构变量*/
charname[8];intage;charsex[2];chardepart[20];floatwage1,wage2,wage3,wage4,wage5;}a;FILE*fp;floatwage;charc='Y';fp=fopen("wage.dat","w");/*创建一个文件只写*/
while(c=='Y'||c=='y')/*判断是否继续循环*/
{
printf("\nName:");scanf("%s",);/*输入姓名*/
printf("Age:");scanf("%d",&a.wage);/*输入年龄*/
printf("Sex:");scanf("%d",a.sex);printf("Dept:");scanf("%s",a.depart);
9printf("Wage1:");scanf("%f",&a.wage1);/*输入工资*/
printf("Wage2:");scanf("%f",&a.wage2);printf("Wage3:");scanf("%f",&a.wage3);printf("Wage4:");scanf("%f",&a.wage4);printf("Wage5:");scanf("%f",&a.wage5);wage=a.wage1+a.wage2+a.wage3+a.wage4+a.wage5;printf("Thesumofwageis6.2f\n",wage);/*显示结果*/
fprintf(fp,"%10s%4d%4s%30s%10.2f\n",/*结果写入文件*/
,a.age,a.sex,a.depart,wage);while(1){printf("Continue?<Y/N>");c=getchar();if(c=='Y'||c=='y'||c=='N'||c=='n')break;}}fclose(fp);}结构数组结构数组就是具有相同结构类型的变量集合。假如要定义一个班级40个同学的姓名、性别、年龄和住址,可以定义成一个结构数组。如下所示:struct{charname[8];charsex[2];intage;charaddr[40];}student[40];需要指出的是结构数组成员的访问是以数组元素为结构变量的,其形式为:结构数组元素.成员名例如:student[0].namestudent[30].age实际上结构数组相当于一个二维构造,第一维是结构数组元素,每个元素是一个结构变量,第二维是结构成员。注意:结构数组的成员也可以是数组变量。structa{intm[3][5];floatf;chars[20];}y[4];为了访问结构a中结构变量y[2]的这个变量,可写成y[2].m[1][4]结构指针结构指针是指向结构的指针。它由一个加在结构变量名前的"*"操作符来定义,例如用前面已说明的结构定义一个结构指针如下:structstring{charname[8];charsex[2];intage;charaddr[40];}*student;也可省略结构指针名只作结构说明,然后再用下面的语句定义结构指针。structstring*student;结构指针使用结构指针对结构成员的访问,与结构变量对结构成员的访问在表达方式上有所不同。结构指针对结构成员的访问表示为:结构指针名->结构成员其中"->"是两个符号"-"和">"的组合,好象一个箭头指向结构成员。例如要给上面定义的结构中name和age赋值,可以用下面语句:
strcpy(student->name,"LuG.C");student->age=18;
实际上,student->name就是(*student).name的缩写形式。需要指出的是结构指针是指向结构的一个指针,即结构中第一个成员的首地址,因此在使用之前应该对结构指针初始化,即分配整个结构长度的字节空间,这可用下面函数完成,仍以上例来说明如下:
student=(structstring*)malloc(sizeof(structstring));sizeof(structstring)自动求取string结构的字节长度,malloc()函数定义了一个大小为结构长度的内存区域,然后将其诈地址作为结构指针返回。
注意:
1.结构作为一种数据类型,因此定义的结构变量或结构指针变量同样有局部变量和全程变量,视定义的位置而定。
2.结构变量名不是指向该结构的地址,这与数组名的含义不同,因此若需要求结构中第一个成员的首地址应该是&[结构变量名]。
3.结构的复杂形式嵌套结构嵌套结构是指在一个结构成员中可以包括其它一个结构,C允许这种嵌套。例如:下面是一个有嵌套的结构structstring{charname[8];intage;structaddraddress;}student;其中:addr为另一个结构的结构名,必须要先进行,说明,即structaddr{charcity[20];unsignedlongzipcode;chartel[14];}如果要给student结构中成员address结构中的zipcode赋值,则可写成:student.address.zipcode=200001;每个结构成员名从最外层直到最内层逐个被列出,即嵌套式结构成员的表达方式是:结构变量名.嵌套结构变量名.结构成员名其中:嵌套结构可以有很多,结构成员名为最内层结构中不是结构的成员名。结构体注意事项结构体之间不能加减乘除,但是可以相互赋值普通结构体变量和结构体指针变量作为函数传参的问题:g1(stutctStudentstu)g2(stutctStudent*stu)见示例:联合以体定丑义联合讲说明助和联衡合变戒量定扑义与耐结构校十分勺相似赢。其字形式圾为:un酱io众n联合沃名{数据凉类型洲成员脱名;数据酷类型膛成员诊名;..壤.}联合竞变量杨名;联合洗表示丧几个错变量佛公用剃一个锈内存命位置,在不哈同的并时间粗保存王不同设的数条据类巧型和狡不同栽长度泥的变霉量。下例极表示北说明异一个沙联合a_痒bc胀:un驳io安n没a_昏bc钻{in扬t器i;ch秆ar棕m旗m;};16联合详体变彩量在联川合变门量lg贫c中,整型左量i和字蜡符mm公用浴同一哪内存端位置硬。当一泪个联狸合被种说明姐时,编译失程序谦自动捡地产及生一溪个变改量,其长型度为另联合搞中最独大的葵变量样长度担。联合注访问均其成房诚员的凯方法榴与结估构相律同。尺同样米联合闲变量抓也可泡以定矩义成竹数组狗或指疫针,但定它义为打指针独时,也要仁用"-签>"符号,此时满联合零访问裳成员拳可表颜示成:联合洋名->成员贤名17联合描结构显嵌套另外,联合棍既可渴以出竞现在盆结构莲内,它的首成员凭也可晚以是补结构削。例如:st象ru册ct行{in管t井ag宰e;ch杆ar遍*梳ad华dr惭;un坏io厨n{in至t发i;ch矛ar感*拘ch丙;}x千;}y赢[1颗0]局;若要卸访问紧结构此变量y[痕1]中联车合x的成作员i,可以怨写成:y[蚂1]合.x凭.i凑;若要剧访问为结构腾变量y[描2]中联包合x的字邮符串抓指针ch的第恳一个爪字符鱼可写亭成:*y[宰2]甚.x眯.c奏h;若写古成"y丑[2欠].她x.猴*c稼h;山"是错艰误的夸。结构匠和联馅合区嚷别1.结构住和联香合都晶是由吓多个锡不同北的数丈据类番型成昨员组御成,但在负任何熔同一柔时刻,联合粥中只望存放枣了一垃个被豆选中典的成庄员,而结允构的抓所有尝成员吊都存礼在。2.对于彻联合袄的不选同成乱员赋灶值,将会穿对其寇它成佛员重棒写,原来禁成员恨的值妙就不询存在落了,而对疤于结核构的磁不同顷成员她赋值久是互匹不影祝响的晃。下面之举一破个例篇了来觉加对玻深联求合的卫理解梳。ma耕in你(){un瞒io症n{暑/淋*定义仅一个凶联合蠢*/in驱t站i;st遍ru也ct煤{杰/*在联徐合中孤定义孔一个粥结构烟*/ch结ar四f酿ir锣st残;ch柄ar溉s蜓ec便on拿d;}h姨al灭f;}n亚um犯be粗r;nu告mb必er拆.i警=0峡x4婆24鸟1;抹/丝式*联合剃成员醒赋值母*/pr终in忘tf饿("风%c匀%c伪\n终",容n外um拉be迟r.愉ha款lf毁.f暂ir井st物,结mu抓mb料er接.h师al犹f.依se粘co排nd直);nu乖mb粪er贞.h俭al东f.左fi谅rs莫t=溪'a务';客/描*联合管中结修构成还员赋号值*/nu咽mb俱er伪.h村al抱f.确se旋co店nd泊='幅b'编;pr户in彩tf秩("睁%x剑\n郑",缠n女um倒be榨r.前i)挖;}输出欧结果火为:AB62怀61从上宗例结挽果可副以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英语-河南金太阳2024-2025学年高二上学期第二次月考
- 加强学校实验室的安全教育
- 2025年高性能覆铜箔板原纸项目建议书
- 项目落地执行综合解决方案手册
- 大学生夏季安全教育
- 影视行业拍摄安全须知
- 格林童话中的教育意义与价值分析
- 课本里的历史人物读后感
- 景观仿木护栏安装施工方案
- 山东畜牧养殖温室施工方案
- 小学四年级上册脱式计算100题及答案
- 2024年01月北京市地质矿产勘查院所属事业单位招考聘用笔试历年高频考题(难、易错点荟萃)答案带详解附后
- 新产品开发(toshiba案例分析组)
- 4.1.1 有理数指数幂-参考课件
- 人教版六年级数学下册全册大单元教学任务单
- JJF(新) 112-2023 微量残炭测定仪校准规范
- 2024销售人员年终工作总结2篇
- 2024年牛排行业分析报告及未来发展趋势
- 食品投诉处理培训课件
- 血液科品管圈PDCA案例合集
- 创伤患者护理和评估
评论
0/150
提交评论