C语言 结构体和联合体_第1页
C语言 结构体和联合体_第2页
C语言 结构体和联合体_第3页
C语言 结构体和联合体_第4页
C语言 结构体和联合体_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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);

9pr脊in托tf叠("街Wa利ge卧1:王")歌;sc惕an记f(粉"%弱f"缝,朵&a堵.w害ag侄e1甘);逮/着*输入创工资原*/pr危in存tf汉("妨Wa监ge醉2:逮")月;sc骨an楚f(专"%材f"宽,膏&a犹.w信ag陶e2盏);pr宏in渐tf胳("绞Wa骨ge厨3:爹")片;sc躁an计f(昆"%缸f"验,潮&a各.w冒ag隙e3蹈);pr刚in虎tf长("夫Wa院ge拌4:倡")浴;sc除an捞f(粪"%裤f"牺,霜&a找.w牲ag治e4销);pr楚in命tf稻("来Wa哪ge云5:手")轮;sc恭an应f(戏"%拖f"孕,督&a午.w肺ag败e5亩);wa系ge具=a垃.w却ag乖e1城+a翅.w朴ag电e2弟+a汁.w婚ag歌e3和+a朱.w士ag篇e4廊+a拥.w穷ag愚e5袭;pr忘in继tf容("缺Th窃e斗su捡m优of辱w世ag相e洗is筹6仁.2毒f\汇n"窑,享wa首ge洁);桨/*显示会结果靠*/fp是ri桐nt己f(盐fp宅,希"%饮10会s%唱4d好%4充s%侦30追s%厕10侦.2哈f\捞n"插,担/卡*结果落写入键文件魄*/a.柴na婆me仇,先a.姨ag贤e,瞧a嗽.s督ex剥,像a.可de末pa锤rt筹,鼓wa院ge呜);wh树il母e(猜1){pr宗in堤tf打("潮Co耕nt联in培ue硬?<冷Y/谋N>螺")姑;c=滨ge位tc若ha烦r(移);if把(c比==绩'Y宁'|周|c跳==脑'y薯'|务|c达==智'N喝'|孩|c棚==介'n烫')br跳ea毯k;}}fc钉lo偶se届(f镜p)讽;}结构始数组结构阁数组愈就是矩具有凉相同降结构枯类型渣的变工量集尾合。测假如冬要定倡义一隐个班流级4腰0个减同学却的姓袭名、糊性别希、年梳龄和钉住址笨,轨可以繁定义株成一拔个结如构数慰组。探如下屠所示忆:st升ru秒ct笛{ch进ar碍n驴am哈e[爱8]相;ch设ar解s泛ex俯[2势];in祖t纵ag桨e;ch机ar呢a唤dd蒸r[牧40次];}s趋tu枪de槽nt肥[4纯0]既;需要扒指出卸的是京结构哈数组拆成员参的访享问是廉以数珠组元镜素为五结构索变量悼的,紧其蓬形式未为:结构喝数组挪元素障.成垒员名例如食:艺s刷tu瓶de施nt邮[0难].匠na舟me班s附tu书de华nt哀[3放0]黄.a天ge实际帖上结尿构数踪蝶组相席当于锣一个啊二维顺构造范,苍第一争维是脆结构旗数组搭元素残,邪每个静元素贿是一磁个结蚕构变菜量,驱第爷二维封是结寻构成锁员。谊注意高:惨结驳构数醒组的谢成员葛也可闪以是靠数组脆变量样。st侄ru罩ct肿a{in勺t汪m[崇3]蓄[5柴];fl镰oa炎t愚f;ch扛ar话s箱[2陶0]券;}y跌[4坑];为了猪访问绝结构医a中败结构鞭变量或y[渗2]诱的这麦个变径量,债可反写成y[枝2]揉.m割[1叉][史4]结构天指针结构祸指针水是指府向结波构的微指针波。它肤由一煌个加轮在结傻构变应量名码前的睛"*唉"期操作支符来宪定义眯,朽例如观用前召面已喜说明腰的结盒构定科义一咳个结锈构指善针如仙下:st蛾ru久ct叠s妨tr砌in桃g{ch嚷ar术n桥am旋e[渴8]亡;ch著ar胡s乎ex苦[2无];in撑t孔ag泳e;ch昼ar纵a带dd母r[小40睡];}*遇st圾ud市en怨t;也可查省略获结构句指针乓名只峰作结艘构说俭明,料然抚后再单用下脆面的瘦语句肚定义剪结构拢指针逆。st储ru纷ct态s牢tr降in栗g您*s眨tu壶de避nt买;结构艇指针使用称结构驱指针拔对结燥构成误员的造访问,与结寸构变淹量对否结构好成员吗的访煤问在很表达沉方式恶上有衡所不屈同。业结构安指针刮对结匙构成杨员的机访问料表示音为:结构精指针字名->结构隶成员其中"-吓>"是两受个符狐号"-希"和">哄"的组荡合,好象勺一个霞箭头塔指向概结构袜成员宽。例变如要墨给上血面定盼义的溪结构号中na那me和ag脏e赋值,可以涂用下就面语潜句:st眯rc歼py脉(s画tu忠de须nt臂->费na屠me斑,愈"L托u钓G.卸C"沟);st房诚ud拍en胳t-均>a伴ge凝=1桌8;实际旺上,住st叹ud眼en默t-输>n廉am区e就是(*置st莲ud勤en亩t)亏.n时am诱e的缩渐写形汁式。需要蚕指出勾的是牵结构笋指针患是指肺向结句构的穷一个牛指针,即结松构中火第一朗个成融员的穗首地拣址,因此辛在使止用之四前应苍该对饶结构足指针冈初始纤化,即分室配整坟个结抬构长呆度的告字节柿空间,这可崭用下请面函烧数完招成,仍以闹上例争来说拒明如标下:st思ud律en猜t=罩(s蔽tr等uc往t侮st咏ri订ng穿*)螺ma柄ll击oc格(s兵iz辛e气of叶(筛st钱ru沈ct肃s师tr臭in者g)野);si较ze议o话f论(s帆tr觉uc部t覆st割ri刮ng跪)自动凤求取st兰ri招ng结构肆的字闷节长偿度,日ma奋ll臭oc值()函数洽定义盯了一拍个大亚小为跌结构芒长度侄的内顷存区御域,然后避将其狡诈地腔址作赢为结牙构指拉针返厉回。注意:1.结构钩作为之一种年数据博类型,因此目定义惑的结布构变撕量或放结构淡指针选变量坐同样滚有局料部变复量和贫全程踩变量,视定捎义的宪位置笑而定浅。2.结构缩慧变量倦名不录是指拴向该购结构银的地刻址,这与粘数组洗名的乳含义海不同,因此问若需昂要求始结构础中第轿一个鹿成员姐的首哭地址衡应该所是&[结构淘变量册名]。3.结构政的复偏杂形伴式嵌套销结构嵌套乱结构阁是指赤在一替个结储构成园员中他可以曲包括挨其它固一个仅结构注,蛇C抢允许肤这种餐嵌套队。例如兔:磨下面惯是一梢个有爷嵌套琴的结燃构st凯ru步ct皱s揭tr鸣in糖g{ch捎ar递n秀am股e[录8]竟;in暮t膝ag逮e;st涂ru铃ct蠢a纽奉dd嘴r惯ad水dr伸es裕s;}楚st舞ud须en抚t;其中奥:凳ad仔dr滨为另碗一个局结构晶的结译构名餐,耐必须队要先咸进行迎,娃说明脑,轰即st木ru姐ct愈a违dd扇r{ch饭ar悠c霞it授y[绒20倦];un辣si婚gn某ed颗l谢on赴g糕zi困pc蜻od艺e;ch截ar狂t域el湾[1油4]北;}如果组要给著st捷ud狐en影t结衫构中没成员怒ad景dr晴es森s结胆构中疑的z肌ip迟co波de亭赋值撞,场则可湾写成提:st讯ud悬en区t.寺ad烧dr挡es志s.岔zi事pc海od怪e=神20薄00日01紫;每个确结构讽成员受名从悠最外涨层直列到最钳内层泉逐个枕被列盖出,盼即因嵌套抗式结手构成序员的拆表达手方式恋是:结构就变量慰名.亭嵌套友结构掉变量酒名.额结构睡成员则名其中状:查嵌套宵结构砌可以少有很列多,泪结苦构成贼员名刚为最蹦内层鞋结构姓中不利是结础构的成成员榨名。结构竟体注淹意事形项结构患体之机间不锋能加坟减乘级除,肃但是性可以利相互姿赋值普通勇结构辨体变乏量和裁结构询体指蛇针变冶量作大为函召数传维参的喉问题藏:g1搜(s携tu饮tc冒t遥S病tu招de显nt唱st溪u)g2枝(s六tu膝tc刺t皱S承tu肺de嘴nt重*s渠tu临)见示训例:联合帅体定思义联合塘说明乔和联鲜合变刊量定病义与虹结构炎十分锯相似慕。其朽形式疗为: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僚';吗/学*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论