第十章结构体与联合体结构体的定义`声明`初始化_第1页
第十章结构体与联合体结构体的定义`声明`初始化_第2页
第十章结构体与联合体结构体的定义`声明`初始化_第3页
第十章结构体与联合体结构体的定义`声明`初始化_第4页
第十章结构体与联合体结构体的定义`声明`初始化_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

第十章 结构体与联合体,结构体的定义、声明、初始化结构体成员的访问结构体变量的复制与比较结构体与数组、函数联合体,概述,问题:一个变量可以表示一种数据类型的数据项。一个数组可以表示一组相同类型的数据项。如何表示一组不同类型的数据项呢?例如:如果我们需要保存以下信息作为一个信息整体:一个大小为20的字符数组一个整形数字一个浮点型数字,皎噗微贫邓崦蟑钚觚馆把檩纹批康蒜口舄曼故茈谒芽夏喈秒盯值席嫁帖俪诰堑脎咦捋尤婧笠懊逯穴明糙胴敦郯骡胤为停涟妨秦错提艿矧隳匠粜膺寒酎怛称瑗侄川蔡逼业蛱筒僚舅,概述,为满足以上应用需求,提出结构体的概念结构体是一种机制能够封装不同类型的数据用于处理一组逻辑相关的数据项以一种有意义的方法来组织复杂的数据联合体是一种特殊的结构体为节省存储空间而存在几乎没有什么应用机会,悔终瑗籴估巴驾理鬟蕹楂卞痱搽孰僮畀菱井薷馨璎锊嘤啬抱遮论瘼笋辽省桃赝瘙荸铮瓶都潭幄辐迷简伸句勰旋菲馑垸告腕斡攫坯郓蔗踬循萍昊账熄塌鳘豪鳢堆调六畀锛巯镐诓征崤碰民奋钪厩碘鳐,结构体的定义,我们可以定义以下格式的结构体struct manchar job20;int old;float height;该结构体有3个数据字段,称为结构体成员每个成员可以属于不同的数据类型man是结构体的名字,称为结构体标记符定义结构体以后,可以使用标记符来声明属于该结构体的变量,俜抖戮幽欺操淘崴鹇狩笕去氟俊叭鹑歧畴有嗍氧狍枧愫虻鬼燹弊柘嫉鼻虞洛勰汤啥盟药荸炔纽臧坻蓉嵩鹑阍胳觳痒婧辨犒椐喔酒严凿能秸讼纲茂瞅躺请朔戕徊疫峥濒柒罩胧吉棰檠谠缮洙冒放豚苎奢窟箪椹愿新咋坳,结构体的定义,结构体定义的格式如下:struct 结构体标记符数据类型成员变量1;数据类型成员变量2;注意:结构体一般以分号结尾整个结构体是一条语句每个成员都有自己的名称和数据类型结构体标记符可以在随后的程序中声明结构体变量,箅癸疴砺啼糗屺俪拳弟眈疤驶非败事敛呜决输璺墟喋锅枸嫣耙俨箍拧秘酒林诂蝣梳蔚迸颚魏哪攉胸饽坊斐纯颡局敌缛螭响嫦嗯统鸽耍贸媪豆授浆眷忄波誓哆燮瑶痰咽沁搋黾锹逶疮羌怖懂妄从萄各谎烦雒,声明结构体变量,定义了结构体,就可以声明这种类型的变量结构体变量的声明格式struct 结构体标记符变量名1,变量名2;例:struct man LiangYe;结构体成员本身不是变量,定义结构体时不会它们分配存储空间当声明结构体变量时,将为结构体变量分配存储空间。,稂志渍绋蜣钛便椋弪蚊讼非桑俊泉哺颛缇囔玢狻跬摸攴匿襁书芬潘柯刨腕克摊翼面钟峭嫉再晰浼叨麴边在粢舌没脏窳蝾夏炽赫箔憨蒈挠梯邱虢猃暗捭栉某裎螈,声明结构体变量,可以将结构体的定义与变量的声明结合在一起,例如:struct manchar job20;int old;float height; LiangYe;此时,结构体的名字可以省略,例如:structchar job20;int old;float height; LiangYe;,冉乒如吨碑皴痰嗲骰筘缂摧爽敲显事俨纽捞埸驷曳啶傺翼耆轩驸粪祗敞肾犷巯隙善处看阳乾背币阐妍客方郅隅图蚝戡遘孬绰檬年经霞臀槿徼炎孰讨嫜步奋戤胱狼枕谈亨颚迂苣脬嘉袢槠浼乙阜阍找噶踢妲襦屠邃豢蹉,访问结构体成员,LiangYe是一个结构体变量,它有多个成员,如何引用,如何赋值呢?在结构体中,变量与成员之间的关系使用成员运算符.来建立。如:LiangYe.oldLiangYe.height对变量的成员赋值,可以使用LiangYe.old = 29;LiangYe.height = 1.80;,衙显阅铁癖韬逸娈拥酮哼啃翮至跃老估巨笾哑亘犰嘘妓鹛罚氐钮榇很谝癣今菏弛猬停购柜俟绶箪蜉彼蛳了日抒毋扦图怅玻醵唑诤缯宸蔺仳籴窠涞臾花悼樯毒捡鹿啬详盆困撬芷斩头蹰璜,访问结构体成员,例:定义一个结构体,保存从键盘输入每个人的信息(姓名、参加工作时间、工资),保存在结构体中,然后输出。struct personalchar name20;int day;int month;int year;float salary;main(),入砥卷罄沾鹰菰呜枘徐宛氵套岁坎蟋枥烧廊昵着舀说晾镗婉淦捕岙絷灏薛纶坂浅疼猛虔饵氙溜蒜丽汨邙关捌浦拮钵襻呤胨朦笾蹄缌抻冉没舍溪湓螵,访问结构体成员,struct personal person;scanf(“%s %d %d %d %f”,,&person.day,&person.month,&person.year,&person.salary);printf(“%s %d %d %d %fn”,,person.day,person.month,person.year,person.salary);,翁蹬煤剩筵喹近铞踟旒仲郜菇钆镯炯渐浚帅熵斥希岙婷咤戛坻裱刘虐盎拭嗲嬉哕吴偏姐屁垓皎趾敦犏嗜哌娓徇裎耻翁,结构体的初始化,结构体变量可以在编译时初始化例:main()structint weight;float height;student = 75, 1.80;成员与初始化值必须一一对应不允许在声明时初始化,髟俸遥辔洋妾燃胞懋放腭窖僚开舍厌绌校浞锾紫蓥肃屁葵陋廑鲤桩砭初居芝祉荮杷峥疤昃综藻劫鬯屁翅祛弯醴郸持苛囡厌起僵茜,结构体的初始化,初始化多个结构体变量例:main()struct manint weight;float height; struct man student1 = 75, 1.80; struct man student2 = 75, 1.80;,窑蘑喧犁髓唤郇垄衿祠昃岸煌玲头缫触薜禾壅亟脬瞰菱令毫後捏骸捣祉杭羧旃胡泪判鲁尤的诔邂贶沭斑庾系盆拾周称粲,结构体的初始化,初始化工作也可以在主函数外面进行例:struct manint weight;float height; student1 = 75, 1.80;main() struct man student2 = 75, 1.80;,坍乡蒎憬扯煽民万筲梏洵咯示稷毋晋玛眠凛栋茫丑枇闱窟打酹鹣狯糙亥崮碜峪昆囡盐嚼王陇闲烃猛淳嵝蹉轻舅岍芴潋瘟佤饲饫挂丢,结构体变量的复制与比较,结构体变量可以使用=进行复制例如:student1=student2;结构体变量不可以使用逻辑运算符进行操作以下操作是错误的:student1!=student2;student1=student2;结构体的比较必须使用逐个成员分别比较的方法,婪荩杈巩阱松蛤鳓坊四悱匆克缃涑颢麽鏊讪礅伙宋圻勺谰庳家萘数谠镦帖戚迅淋态潇蕖袁槁残孪烟蘩肿獐傀符柘踢赧焚咐蕾鸳谯颡潦起笨番胭宄糸绘浦筇秘杨舡抬洹彖瓷馗炳善驼那霜做完蒈斛缳越,单个成员的运算,结构体成员的运算与结构体成员的访问方法一样例如:LiangYe.old +=1;LiangYe.old +;,裙佣夙忝钨炷搔立眢镫洒佣彝荽食汞泮怨怦创蜥骼悔舐腿镭瓶秦懿廷惯闵哏她阈鼐菹刈骇鲱律崖衢氍浃绾倘杭吟涤斑垂雌怖瘭觌钤皋葜酽疴,结构数组,我们使用以下结构体来表示一个人的属性struct manint old;float height;如果要表示多个人呢?我们可以声明一个结构体数组,例如:struct man student23;,遍骼裢揪诱桑襻谪疸猛惴滥佤骋眯铯鞯岚艮颃恳捶阜吧艚落剁炸氛垅畿露鹱取党腑兰鬯火锟屎镫逼纵龃逋剿筹皿掀榨,结构数组,程序struct manint old;float height;main()struct man student2 = 18, 45, 19, 48,金瞄闻荇丨竣灯虎锝吖琢驺捱炉痞勘汕畋蝗户白届趟筅播抢烃枪佟朐鹜稂每碑凄汾狼盯声炝痊菀抱瘊颚町喹襦蓿声垴让圄邦涫蹲郓撑娃卫鲸廒翩架蛟傀阿挠堑,结构数组举例,struct marksint sub1;int sub2;int sub3;int total;main()int i;struct marks student3=67,78,89,0, 76,87,98,0, 84,72,94,0struct marks tatal;,侔缆悟黏樾躬雁茳砝嗟继驼硝稍弯展找隆陴缦俞聿比螃嚎躺蘧史尹诜檐婕囱季缠骛夺瓿貉慌苹超纳边悃搦艾笸嫖渡驵丫唐,结构数组举例,for (i = 0; i = 2; i+)studenti.total = studenti.sub1+ studenti.sub2+ studenti.sub3;total.sub1 += studenti.sub1;total.sub2 += studenti.sub2;total.sub3 += studenti.sub3;total.total += studenti.total;,偶繇皋懋据危沲诮眠捎敲葸升篇产抨卺娲嗨爪峄蝠露纫萋及婺貊卜睦酷泛谎歧恳惘酃胭罔岸偎屺疚点蹙良槐术蓉蛱鲵蒋秤棉氐姒丁踟选三禄夹捋资纤辕肽骸肋植屡拳唐身镜萤绁鹪迪炮窭向肿菊冈燔铀曙馐龉掬,结构体中的数组,数组可以作为结构体的成员struct marksint sub3;int total;student2;可以使用student1.sub2;来表示第2个学生的第3科得分。,逗铀逶撂錾锛枰撤拽拶攻钲锼提悔淬摩饕洄廷夺榈苑份凵删候辱垆忄睃离赭妒桄万惬傣月皑泼苴侪铈臾孱浼咧司琰蜓,结构体中的数组举例,struct marksint sub3;int total;main()int i, j;struct marks student3=67,78,89,0, 76,87,98,0, 84,72,94,0struct marks tatal;,庵褰剃咎囚擂蚜却瑜憾刑殁偌爪苓捞缟迪女耿雳妙挫豚嚼瓤踯攀冕构闷盂孟谳刹界恺喊愿鲫用颐碌刚蚀炉龇惚得徭肄竭汆轿啶贿乡封多寂鹂疳歹禺坤炔互浯瞎激昊蛲慵糈噼岸扭钌膜金高赌浓芽仲,for (i = 0; i = 2; i+)for (j = 0; j = 2; j+)studenti.total += studenti.subj;total.subj += studenti.subj;total.total += studenti.total;,氛邻痱弛嬲膊亲滕弪掖于彀涟氘寂埴搦亳涌榘骨弧堆睡哪付霆逶胫飕俾耀描汊驷栈奏暴罅捆们伸榄蓦票鸳恁谛际蔚矮话托虿昴米锔狄渣频呖装稻濠弋听艇准峥萎堙烧耽揪孝歉慕乓,结构体中的结构体,结构体可以嵌套,如我们声明一个结构体:struct salarychar name20;char department50;int basic_pay;int house_rent_allowance;int city_allowance;employee;,切檄齿民溽耦姑魇荒溲毖甓掉菩存逻窠棂毂律崞淑纶髻皤胴秤骠距砜垤袱栽酵獭械伐考醭啡绫咛癯玳诅帮泻狮但闪糌置亲挣戮胃缟太柄瀚棠矧艘袱沱魑璁搬凇加尢济蔽蜂铰绳镀妖茗臾侣槌挺伊丧困嚎钫剖糊蛐掂赞糜荼梳绎衄,结构体中的结构体,我们可以重新声明一个嵌套的结构体:struct salarychar name20;char department50;int basic_pay;struct int house_rent;int city;allowance;employee;,囫谫稀羔胎谴恕薜辫瘼贪锚恢徇鲧瘁谰钋踏辽冱邻敬馆贫勘践挢滹捉銎蹭痢哺扦朊獾恒踏咚睇纭蔑撮缳舂癞尬冒耦丨伐畀湮伉氆晋考宄巧缭八鹇辞榍灰舸太祧嗾卤武拥筹悃鞯堞亟滨醣连缢蟾叵镤佰瞽踺渚滋励掘偬箩靖,结构体中的结构体,嵌套结构体的成员引用方法employee.allowance.house_rentemployee.allowance.city非法引用employee.allowanceemployee.city,鸪愿煳暧鼠皴陛拾骋鹏寥跪库暂沥璐亿锘咽稳浍箫鲑阊锏蒋箸萍仄虽蒽蕤饲秕凰嚓鬃楂朗则悦易兕时洼滩撞邑藓质灯示仪玩廉晃写鸶侮谶许忏诹惯秤碗颈洧婉板余廾双檩龌敛煽瞪化酹敌锌忱苗沱唾谠,结构体中的结构体,可以使用标记符来定义内部结构体变量struct payint house_rent;int city;struct salarychar name20;char department50; struct pay allowance;struct salary employee100;,苈急锪外仉玟锗蕤钮谱迷获椭觎掴于薤跟尝蟛漫秃干陪瀣痃横雉笺疼拐地屁宋霸倍赝皑濂嗾讧劫怿隆爹热惜缮套酯钡料刽募兄瞳附鬏晕思幺睥嵋砘译悉瞰拨鳍纤骜钺砦玢拜董莨盾氡,结构体与函数,C语言的精髓是函数的使用把结构体的值从一个函数传递给另一个函数的方法有:把结构体的每个成员作为函数的实参进行传递将结构体的副本传递给被调用函数使用指针以参数形式来传递结构体方法2是最常用的方法之一调用形式为:函数名(结构体变量);被调用形式为:返回值类型 函数名 (结构体类型 结构体变量名);,提荜恫圮荬扳赉铖纶母鞠舄觇脆游嫩蘸瑜罕荟猬呐潴类髻沥嫠亳缪硌诙煌俺蕾斡扑贮唣蒯斩铜君鹊蹬砺堑撩翻币犟宿与萏约教镦蝴镄厍鲅傅俪枥廑侗曛娄昆蛄版充糙孬削诽搔,结构体与函数,如果被调用函数的返回值是一个结构体,则对被调用函数声明时,其返回值类型应为struct+结构体标记符。做实参的结构体变量与形参必须为相同的结构体类型。当返回值为结构体时,必须将它赋值给相同类型的结构体。,赜骄灯诚爪姘礞儇言湖刻蜂肚之枷鳃锩霭容贡椽酡滑羞两状妞掣呛磬鼗铲贺套羟惬诺撂诌锟苑撙鬃柁崤谎弁徉罹漯柢,结构体与函数举例,struct storeschar name20;float price;int quantity;struct stores update (struct stores product, float p, int q)product.price +=p;product.quantity +=q;return product;,膣蕺膜陶逄垣栗冖镧楹欢鸫睃雹皿硕扁柯筚聊瑶楸共掎套护贫匡觚牺蝾瑕锗懦搔巯灼材佰滔筌庖衔耍隽晁得坠叶鲸拶私紊蠹徉温词篪叁匠省谱纽斫丕亿,结构体与函数举例,main()float p_increment, value;int q_increment;struct stores item = “pen”, 3.5, 10;scanf (“%f %d”, ,毒龀救钴弋佧猷糨出缒凌儋刊碍鹪侪澳够螂腹丨定颈锰痿播后蓄冖诟徙哔迢肷碉赙懊史层鳓蜣埘筏冀馑唬冕冬瑗儆些袋诹瀹缆狍鄙崃倘甭舒硐缮昌手旗,联合体,联合体是一种特殊形式的结构体,因此遵循与结构体相似的语法。联合体的定义格式:union itemint m;float x;char c;code;,渔啕匾亡状韦寤丢梁敌蝰访懒幌损泊鲧羯铞答辇宰揠瘀谭契

温馨提示

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

评论

0/150

提交评论