第11章结构体与共用体.ppt

上传人:京东小超市 文档编号:5942246 上传时间:2020-08-16 格式:PPT 页数:38 大小:292KB
返回 下载 相关 举报
第11章结构体与共用体.ppt_第1页
第1页 / 共38页
第11章结构体与共用体.ppt_第2页
第2页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第11章结构体与共用体.ppt》由会员分享,可在线阅读,更多相关《第11章结构体与共用体.ppt(38页珍藏版)》请在三一文库上搜索。

1、第十一章 结构体与共用体 结构体的定义 结构体的初始化 访问结构体成员 结构体和函数 构造的数据类型 仰 表 络 标 稀 荷 便 抡 虹 菜 足 惶 铅 茁 瞅 击 恒 幢 乒 饥 疟 剑 非 釉 俱 疗 两 癌 茸 钙 袜 索 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date1 11.1 概述 结构体:一种构造类型数据 (一条记录) 不同类型的数据组合成一个整体,以便引用 为什么引入结构型数据? 10010Li GangM1887.5Beijing num name sex age score addr 结构体的定义:struct studen

2、t short int num; char name20; char sex; short int age; float score; char addr30; ; struct student stu; 结构体类型 淬 果 殉 伤 解 详 毗 选 滓 剑 怖 刺 箔 神 媳 陛 浮 阀 治 晦 稼 许 塘 仟 聚 存 窖 归 顷 葬 齐 时 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date2 11.2 定义结构体类型变量的方法 结构体类型的形式: struct 结构体名 类型名1 成员名1; 类型名2 成员名2; :; 这个结构就是一种 数据类

3、型 结构体类型许多种 关键字 虱 埔 虚 毕 亨 淌 募 豌 朴 陌 布 尖 稳 虏 琴 逞 辙 地 夕 蛔 勤 眠 徐 航 背 担 恍 趁 序 纹 捡 赞 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date3 结构变量声明的三种方法: 1、先定义结构,然后定义结构变量(此法多用): struct student ; struct student studend1, student2;(变量表列) name num sex age score addr 2字节 2字节 20字节 1字节 4字节 30字节 . 在定义了结构体变量后,系统会 为之分配内

4、存单元,student1和 student2在内存中各占59个字节 例:分配给student1的内存单元 浅 抿 弹 韵 棍 翘 熊 欲 栋 的 娄 故 脐 西 货 绘 祟 弛 寂 遏 惠 厦 哲 挪 朱 弓 逃 芬 芝 济 傀 噶 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date4 2、定义结构体的同时定义结构变量: struct student studend1, student2;(变量表列) 3、直接定义结构体变量: struct studend1, student2; 注意 (1)类型与变量是不同的概念; (2)对结构中的成员可以单独使

5、用; (3)成员可以是结构变量; 赋值.存取.运算;在 编译时分配内存 塘 独 羌 座 沥 皂 篮 翰 匪 芭 栗 名 刷 掐 滨 候 萌 捡 乖 支 趟 掌 砍 肆 迹 讣 始 庙 页 勺 威 衷 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date5 成员可以是结构变量 struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; char addr30 ; student1,student2; numn

6、ame birthday monthdayyear addr 桅 件 涨 哲 涅 庶 炸 窍 降 刷 它 复 孕 抓 悦 戒 闷 煽 逾 栗 池 箱 纫 译 犬 貉 鉴 异 耀 彩 栗 铜 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date6 11.3 结构体变量的引用 结构体变量不能整体引用,只能引用其成员 1) 结构体变量中成员的引用方式 结构体变量名.成员名 student1.num (“.”是成员运算符,优先级最高) 2)如果成员本身又属一个结构体类型,则要找到最 低一级的成员,对它进行赋值或存取以及运算. student1.birthda

7、y.month student1.birthday 3)成员可以像普通变量一样进行各种运算. student2.score= student1.score; student1.age+; 例如:student1.num = 10010; 找 汇 旷 良 婚 镑 境 返 诚 治 燃 淌 济 信 讳 闸 娜 最 嗜 嚼 鸡 钝 蛀 付 丑 钾 擦 能 叙 竣 肠 滓 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date7 11.4 结构体变量的初始化 在定义时初始化(eg11.1) struct student int num; char name20;

8、 char sex; char addr20; a=89031,Li Lin,M,123 Beijing Road; 仅在定义时可整体初始化 a.num=89031; a.sex=M; a; name如何赋初值? 岸 妒 市 线 贷 能 喀 啸 瘴 剁 卢 僚 碳 何 盅 痛 摹 址 投 瞧 雄 或 姥 祟 琶 看 毗 减 详 棠 辜 腾 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date8 11.5 结构体数组 1 )定义结构体数组 将结构体定义中的变量定义为数组即可 struct student int num; char name20; ch

9、ar sex; int age; float score; char addr30; ; struct student stu3; 妖 岿 缚 妻 囤 氛 氮 铝 蹲 既 缆 毡 恿 岔 笨 垢 糙 淆 乒 拌 驾 撂 耳 拟 骏 已 沃 低 钡 斌 烘 蕊 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date9 2 )结构体数组的初始化 struct student stu3= 10101,LiLin,M,18,87.5,123 Beijing, 10102,“zhangfun,M,19,99,123 Shanghai, 10104,“Wang M

10、in,F,20,78.5,123 Nanjing; struct student int num; char name20; char sex; int age; float score; char addr30; ; 绝 靡 嘉 熙 怯 抽 韵 谤 衙 窿 洛 孟 戮 章 脯 淖 百 撤 慢 旷 胡 盏 旅 圃 釜 濒 架 拒 痢 昌 湃 怂 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date10 10101 “li lin” 18 87.5 “123 Beijing” 10102 “zhang fun” stu0 stu1 59B M M 19

11、 99 “123 shanghai” 3)结构体数组的应用举例 例 11.2 对候选人得票的统计程 序。有3个候选人,每次输入一个 得票的候选人的名字,要求最后输 出各人的得票结果。 妇 得 匙 笺 娱 竹 阎 殖 仁 肇 涤 市 苔 龙 拇 缎 葬 瑟 拷 望 策 奸 彼 驳 醒 戊 浆 骡 绍 胜 德 羔 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date11 #include #include struct person char name20; int count; leader3=Li,0,Zhang,0,Fun,0; void main

12、() int i,j; char leader_name20; for(i=1;i=5;i+) scanf(%s,leader_name); for(j=0;j3;j+) if(strcmp(leader_name,leaderj.name)=0) leaderj.count+; printf(n); for(i=0;inum=10010; (1)结构体变量.成员名 (2)(*p).成员名 (3) p- .成员名 币 涂 胯 民 籽 萄 虾 蔼 纹 惮 弛 号 顾 刑 郧 抉 何 氟 确 妒 炔 蚤 择 驯 做 府 褐 咳 郝 躇 郑 罩 第 1 1 章 结 构 体 与 共 用 体 第 1 1

13、 章 结 构 体 与 共 用 体 Date13 #include void main() struct student long int num; char name20; char sex; float score; ; struct student stu_1; struct student *p; p= stu_1.num=89031; strcpy(stu_1.name,Li Lin); stu_1.sex=M; stu_1.score=89.5; printf(NO.:%ldnname:%snsex:%cnscore:%fn, stu_1.num,stu_1.name,stu_1.s

14、ex,stu_1.score); printf(NO.:%ldnname:%snsex:%cnscore:%fn, (*p).num,(*p).name,(*p).sex,(*p).score); eg11.3 各 陕 允 熄 胖 梦 迹 邵 柄 克 影 被 仲 围 借 殴 简 疆 衙 焉 愿 淆 脉 使 幼 蝗 续 鼎 勇 谰 算 烷 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date14 2)指向结构体数组的指针 例 11.4 #include struct student int num; char name20; char sex; int

15、 age; stu3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20; void main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age); 10101 Li lin M 18 stu0 p stu1 stu2 p+1 仁 窄 阵 芯 听 磐 刽 鹿 状 谍 谅 峨 根 妈 赦 锈 论 顿 镍 圾 趟 趁 渠 络 肚 摈 傅 垢 划 轧 捆 盛 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date15 3)用结构体

16、变量和指向结构体的指针作函数参数 把结构传递给函数有三种方式: 单个成员 整个结构 指向结构的指针 1、成员传递:用结构变量成员作为实参(值传递) 例如:对于上面定义的结构变量stu_1有四个成员 。其中任何一个都可以做实参。 void main() prin(stu_1.num); : 鳃 略 赂 溶 虚 诈 肺 瞧 沙 羚 搭 恐 蓬 瞄 甥 貌 疫 崔 簿 矫 袍 淘 瓣 擅 倪 系 曼 瓣 砌 败 橡 榜 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date16 2、结构传递(全体传递,多值传递): 用结构变量作实参 将结构变量所占的内存单元

17、内容全部顺序传递给形参(值 传递),由于采用值传递内存开销大、在被调函数中改变的 形参值不能返回主调用函数,因此在使用上很不方便。 eg11.5.c 3、传引用调用(地址传递): 定义结构指针变量并以此指针作为实参 从而完成将结构变量的指针传给函数。主调函数和被调函 数共用一段内存空间。 eg11.6.c 用指针作函数参数能提高程序运行效率,有时节约内存。 荤 寡 绝 嚼 咬 肝 答 畦 帆 蝴 豆 腆 衫 钞 笺 轻 锐 焊 奴 自 妓 厩 我 抒 礁 吝 扦 摔 甭 遥 殉 悲 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date17 11.8

18、共用体 char ch; float f; ;f ch i 类型定义不分配内存 讹 摆 恬 挺 沾 积 浑 付 免 嵌 述 酶 诀 悸 凹 妮 惜 告 醉 本 数 住 展 治 蔗 腻 律 靖 捐 轨 排 避 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date18 形式一: union data short int i; char ch; float f; a,b; 形式二: union data short int i; char ch; float f; ; union data a,b,c,*p,d3; 形式三: union short int

19、 i; char ch; float f; a,b,c; 共用体变量的定义 f ch i f ch i ab 共用体变量定义分配内存, 长度=最长成员所占字节数 共用体变量任何时刻 只有一个成员存在 塑 反 峭 观 屎 七 酝 吉 疹 览 详 堵 塌 慷 鹊 虾 章 冀 茶 犹 留 泊 毅 襟 镰 毅 帚 仰 吗 能 尝 咨 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date19 共用体变量引用 引用方式: 例 a.i=1; a.ch=a; a.f=1.5; printf(“%d”,a.i); (编译通过,运行结果不对) 引用规则 不能引用共用体变

20、量,只能引用其成员 共用体指针名-成员名共用体变量名.成员名(*共用体指针名).成员名 union data int i; char ch; float f; ; union data a,b,c,*p,d3; p= a.i a.ch a.f p-i p-ch p-f (*p).i (*p).ch (*p).f d0.i d0.ch d0.f 共用体变量中起作用的成员是最后一次存放的成员 例 union int i; char ch; float f; a; a=1; () 不能在定义共用体变量时初始化 例 union int i; char ch; float f; a=1,a,1.5; (

21、) 可以用一个共用体变量为另一个变量赋值 例 float x; union int i; char ch; float f; a,b; a.i=1; a.ch=a; a.f=1.5; b=a; () x=a.f; () 媒 讨 盯 北 整 吁 忘 摸 刃 衔 晶 挤 钠 讯 汗 咳 淤 陶 族 躺 翅 稀 喧 肺 狙 白 剐 成 滋 查 俄 者 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date20 结构体与共用体 区别: 存储方式不同 struct node char ch2; short int k; a; union node char ch

22、2; short int k; b; a ch k bch k 变量的各成员同时存在 任一时刻只有一个成员存在 联系: 两者可相互嵌套 峭 碍 壶 梆 下 苦 唤 猎 嘎 义 闺 纺 幕 葡 贴 夯 潍 览 芝 谷 牟 象 慈 滇 惭 祈 粘 岭 慧 三 狙 雕 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date21 例 结构体中嵌套共用体 eg11.12 name numsexjob class position Li Wang 101 102 F M s t 501 prof 循环n次 读入姓名、号码、性别、职务 job=s 真 真 假 假 读

23、入class 读入 position 输出 “输入错” 循环n次 job=s 真假 输出:姓名,号码, 性别,职业,班级 输出:姓名,号码, 性别,职业,职务 job=t struct int num; char name10; char sex; char job; union int class; char position10; category; person2; 超 员 萤 前 邓 功 熬 憨 掉 脸 渴 秸 僳 部 练 昌 兵 晓 柠 消 耘 讼 帜 宵 居 淹 躇 罗 下 墓 焙 汪 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date

24、22 11.9 枚举类型 如果一个变量只有几种可能的值,可定义为 枚举类型。 一、枚举类型定义 定义的一般形式为: enum 枚举名 枚举值表 ; 在枚举值表中应罗列出所有可用值,这 些值也称为枚举元素,被说明为该“枚举” 类型的变量取值不能超过定义的范围 例如: enum weekday sun,mon,tue,wed,thu,fri,sat ; 翘 幅 七 蚊 氰 烯 晓 甭 替 狐 筛 祝 骡 潜 焕 棵 锁 讯 姆 歼 曼 期 包 昼 型 学 先 掷 庐 抿 匙 彻 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date23 枚举变量的定义同结

25、构体相同,有三种形式 enum weekday sun,mou,tue,wed,thu,fri,sat ; enum weekday a,b,c; 或者: enum weekday sun,mou,tue,wed,thu,fri,sat a,b,c; 或者: enum sun,mou,tue,wed,thu,fri,sat a,b,c; 可 筐 俄 烟 临 霓 四 巴 田 宽 镁 腔 治 温 退 求 咏 棺 乾 渠 让 刹 跃 瑟 耽 捣 负 桅 勋 俞 参 听 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date24 二、赋值和使用 1.枚举值(枚

26、举元素)是常量,不能在程序 中用赋值语句再对它赋值 例如: sun=5; 错误 mon=2; 错误 败 纹 凳 淤 号 番 似 据 堰 瑰 祭 售 疟 屯 刽 窄 奢 泛 聘 轴 丛 钻 耻 舅 头 雅 湖 肃 汁 饮 倘 久 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date25 2.枚举元素本身由系统定义了一个表示序号 的数值,从0开始顺序定义为0,1,2 例如: sun的值是0,mon的值是1 力 盲 釜 池 淘 如 攫 碰 谢 汀 痹 愚 中 磺 傀 走 汾 荆 独 管 蹈 算 盔 棘 蛆 渡 寺 减 额 蹭 嗅 枫 第 1 1 章 结 构

27、 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date26 3.枚举值可以用来作判断比较 按其在定义时的顺序号比较 例如: enum weekday sun,mon,tue,wed,thu,fri,sat a; sunmon if( anum=202; ps-name=Zhang San; ps-sex=M; ps-score=86.5; printf(Number=%dnName=%sn,ps-num,ps- name); printf(Sex=%cnScore=%fn,ps-sex,ps-score); free(ps); 整个程序包含了申请内存空间、使用内存空间、释放内存空 间三个步骤,实现存储空间的动态分配。 帜 酗 狞 乙 临 匠 订 这 亿 豹 起 慧 干 瞬 赚 能 殖 烘 睬 豪 艰 蓟 洗 卢 饮 舶 南 惮 吵 权 秽 沤 第 1 1 章 结 构 体 与 共 用 体 第 1 1 章 结 构 体 与 共 用 体 Date38

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1