c语言结构体和共用体.ppt_第1页
c语言结构体和共用体.ppt_第2页
c语言结构体和共用体.ppt_第3页
c语言结构体和共用体.ppt_第4页
c语言结构体和共用体.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

第九章结构体与共用体 结构体 结构体变量的定义 结构体变量的引用 结构体变量的初始化 结构体数组 结构体和指针 共用体 9 1结构体 结构体是一种构造数据类型用途 把不同类型的数据组合成一个整体 自定义数据类型结构体类型定义 struct 结构体名 类型标识符成员名 类型标识符成员名 成员类型可以是基本型或构造型 struct是关键字 不能省略 合法标识符可省 无名结构体 例structstudent intnum charname 20 charsex intage floatscore charaddr 30 结构体类型定义描述结构的组织形式 不分配内存 结构体类型定义的作用域 例子图解 先定义结构体类型 再定义结构体变量一般形式 struct结构体名 类型标识符成员名 类型标识符成员名 struct结构体名变量名表列 9 2结构体变量的定义 一般形式 struct结构体名 类型标识符成员名 类型标识符成员名 变量名表列 例structstudent intnum charname 20 charsex intage floatscore charaddr 30 stu1 stu2 定义结构体类型的同时定义结构体变量 一般形式 struct 类型标识符成员名 类型标识符成员名 变量名表列 例struct intnum charname 20 charsex intage floatscore charaddr 30 stu1 stu2 用无名结构体直接定义变量只能一次 直接定义结构体变量 结构体类型与结构体变量概念不同类型 不分配内存 变量 分配内存类型 不能赋值 存取 运算 变量 可以结构体可嵌套结构体成员名与程序中变量名可相同 不会混淆结构体类型及变量的作用域与生存期 说明 引用规则结构体变量不能整体引用 只能引用变量成员 可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用 成员 分量 运算符优先级 1结合性 从左向右 引用方式 结构体变量名 成员名 9 3结构体变量的引用 形式一 struct结构体名 类型标识符成员名 类型标识符成员名 struct结构体名结构体变量 初始数据 例structstudent intnum charname 20 charsex intage charaddr 30 structstudentstu1 112 WangLin M 19 200BeijingRoad 9 4结构体变量的初始化 struct结构体名 类型标识符成员名 类型标识符成员名 结构体变量 初始数据 例structstudent intnum charname 20 charsex intage charaddr 30 stu1 112 WangLin M 19 200BeijingRoad 结构体变量的初始化形式二 struct 类型标识符成员名 类型标识符成员名 结构体变量 初始数据 例struct intnum charname 20 charsex intage charaddr 30 stu1 112 WangLin M 19 200BeijingRoad 结构体变量的初始化形式三 结构体数组的定义三种形式 形式一 structstudent intnum charname 20 charsex intage structstudentstu 2 形式二 structstudent intnum charname 20 charsex intage stu 2 形式三 struct intnum charname 20 charsex intage stu 2 9 5结构体数组 例struct intnum charname 20 charsex intage stu 结构体数组引用 引用方式 结构体数组名 下标 成员名 结构体数组初始化 structperson charname 20 intcount leader 3 Li 0 Zhang 0 Wang 0 main inti j charleader name 20 for i 1 i 10 i scanf s leader name for j 0 j 3 j if strcmp leader name leader j name 0 leader j count for i 0 i 3 i printf 5s d n leader i name leader i count 例统计后选人选票 指向结构体变量的指针定义形式 struct结构体名 结构体指针名 例structstudent p 使用结构体指针变量引用成员形式 存放结构体变量在内存的起始地址 指向运算符优先级 1结合方向 从左向右 例指向结构体的指针变量 例intn int p n 10 structstudentstu1 structstudent p p num 101 9 6结构体和指针 用结构体变量的成员作参数 值传递用指向结构体变量或数组的指针作参数 地址传递用结构体变量作参数 多值传递 效率低 用指向结构体的指针作函数参数 structdata inta b c main voidfunc structdata structdataarg arg a 27 arg b 3 arg c arg a arg b printf arg a darg b darg c d n arg a arg b arg c printf CallFunc n func arg printf arg a darg b darg c d n arg a arg b arg c voidfunc structdataparm printf parm a dparm b dparm c d n parm a parm b parm c printf Process n parm a 18 parm b 5 parm c parm a parm b printf parm a dparm b dparm c d n parm a parm b parm c printf Return n copy 例用结构体变量作函数参数 1 structdata inta b c main voidfunc structdata parm structdataarg arg a 27 arg b 3 arg c arg a arg b printf arg a darg b darg c d n arg a arg b arg c printf CallFunc n func 例用结构体指针变量作函数参数 2 构造数据类型 也叫联合体用途 使几个不同类型的变量共占一段内存 相互覆盖 共用体类型定义定义形式 union共用体名 类型标识符成员名 类型标识符成员名 例uniondata inti charch floatf 类型定义不分配内存 9 8共用体 形式一 uniondata inti charch floatf a b 形式二 uniondata inti charch floatf uniondataa b c p d 3 形式三 union inti charch floatf a b c 共用体变量定义分配内存 长度 最长成员所占字节数 共用体变量任何时刻只有一个成员存在 共用体变量的定义 引用方式 例a i 1 a ch a a f 1 5 printf d a i 编译通过 运行结果不对 引用规则不能引用共用体变量 只能引用其成员 共用体变量中起作用的成员是最后一次存放的成员 例union inti charch floatf a a 1 不能在定义共用体变量时初始化 例union inti charch floatf a 1 a 1 5 可以用一个共用体变量为另一个变量赋值 例floatx union inti charch floatf a b a i 1 a ch a a f 1 5 b a x a f 共用体变量引用 运行结果 i 60501ch0 101 ch1 141ch0 A ch1 a main unionint char inti charch 2 x x i 24897 printf i o n x i printf ch0 o ch1 o nch0 c ch1 c n x ch 0 x ch 1 x ch 0 x ch 1 例将一个整数按字节输出 区别 存储方式不同 联系 两者可相互嵌套 结构体与共用体 功能 用自定义名字为已有数据类型命名类型定义简单形式 typedeftypename 例typedefintINTEGER 类型定义语句关键字 已有数据类型名 用户定义的类型名 例typedeffloatREAL 类型定义后 与已有类型一样使用 例INTEGERa b c REALf1 f2 说明 1 typedef没有创造新数据类型2 typedef是定义类型 不能定义变量3 typedef与define不同 definetypedef预编译时处理编译时处理简单字符置换为已有类型命名 用typedef定义类型 按定义变量方法先写出定义体如inti 将变量名换成新类型名如intINTEGER 最前面加typedef如typedefintINTEGER 用新类型名定义变量如INTEGERi j 例定义数组类型inta 100 intARRAY 100 typedefintARRAY 100 ARRAYa b c inta 100 b 100 c 100 例定义指针类型char str char STRING typedefchar STRING STRINGp s 10 char p char s 10 例定义函数指针类型int p int POWER typedefint POWER POWERp1 p2 int p1 p2 例定义结构体类型structdate intmonth intday intyear d 例定义结构体类型structdate intmonth intday intyear DATE 例定义结构体类型typedefstructdate intmonth intday intyear DATE

温馨提示

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

评论

0/150

提交评论