版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
结构体和共用体结构体和共用体是C语言中两种重要的数据结构,它们允许程序员将多个不同类型的数据组合成一个整体。结构体和共用体在内存管理、数据组织和代码优化方面发挥着重要作用。目录结构体定义访问变量初始化函数嵌套数组指针匿名结构体共用体定义访问变量初始化函数嵌套数组指针匿名共用体比较区别应用场景其他注意事项课后练习总结什么是结构体?结构体(struct)是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起,形成一个有机的整体。结构体可以看作是自定义的数据结构,用于存储和管理相互关联的数据。定义结构体的语法1关键字struct用于定义结构体类型2结构体名自定义结构体的名称3成员变量结构体内部的变量4分号定义结构体类型的结束标志例如,定义一个名为“Student”的结构体,包含成员变量“name”、“age”和“score”,可以使用以下语法:structStudent{charname[20];intage;floatscore;};结构体成员的访问点运算符使用点运算符(.)访问结构体成员。例如,如果结构体变量名为student,成员名为name,则可以使用访问name成员。箭头运算符使用箭头运算符(->)访问通过指针指向的结构体成员。例如,如果结构体指针名为pStudent,则可以使用pStudent->name访问name成员。示例例如,以下代码展示了如何使用点运算符和箭头运算符访问结构体成员:structStudent{charname[50];intage;};intmain(){structStudentstudent={"张三",20};structStudent*pStudent=&student;printf("学生姓名:%s\n",);printf("学生年龄:%d\n",pStudent->age);return0;}结构体变量的声明1语法使用结构体类型定义结构体变量。例如,声明一个名为"student"的结构体变量,类型为"structStudent"。2示例structStudentstudent;3初始化在声明结构体变量的同时,可以使用大括号初始化其成员。例如,将"student"变量的name成员初始化为"张三"。结构体变量的初始化1直接初始化在声明结构体变量时直接赋值。2逐成员初始化使用点运算符为每个成员赋值。3初始化列表使用花括号将成员的值列出来。结构体变量的初始化方法有三种:直接初始化、逐成员初始化和初始化列表。直接初始化在声明变量时直接赋值。逐成员初始化使用点运算符为每个成员赋值。初始化列表使用花括号将成员的值列出来。结构体变量作为函数参数传递结构体变量将结构体变量作为参数传递给函数,函数可以通过结构体变量的成员名访问其成员。传递结构体指针通过指针传递结构体变量,可以节省内存空间,提高代码效率。修改结构体成员在函数内部,可以修改结构体成员的值,这些修改会反映到原始结构体变量中。结构体变量作为函数返回值1函数定义声明返回结构体的函数2函数调用通过函数调用获得结构体3返回值函数返回结构体变量结构体变量作为函数返回值时,函数的返回值类型应为结构体类型。函数调用时,会将结构体变量的内容复制到函数调用处。结构体的嵌套1定义嵌套结构体可以在结构体中定义另一个结构体,形成嵌套结构体。2访问嵌套结构体成员使用“.”运算符来访问嵌套结构体成员,例如:outer.inner.member。3应用场景嵌套结构体可以用来表示更复杂的数据结构,例如描述一个学生的个人信息,包括姓名、年龄、性别以及地址。结构体数组1定义多个结构体变量的集合。2语法struct结构体名数组名[数组大小];3访问通过数组索引访问。4应用存储多个同类型的数据。结构体数组可以方便地存储多个相同类型的结构体数据。可以通过数组索引访问数组中的每个结构体变量。结构体指针结构体指针的定义结构体指针指向结构体变量的内存地址。使用结构体指针可以更有效地访问和操作结构体成员。例如,可以使用结构体指针访问结构体成员,并修改结构体变量的值。结构体指针的使用我们可以使用结构体指针指向结构体变量,然后通过指针访问结构体成员,例如,使用结构体指针访问结构体成员并进行修改,使用结构体指针传递结构体变量作为函数参数。结构体指针的优势结构体指针提供了灵活的内存访问方式,能够提高代码效率和可读性。同时,结构体指针方便了结构体变量在函数之间传递,并可以动态地创建和释放结构体内存空间。匿名结构体定义匿名结构体是指没有名字的结构体,直接定义并使用。用途主要用于简化代码,避免重复定义结构体名称,提高代码可读性。实例将匿名结构体作为函数参数或返回值,可以简化代码,提高效率。什么是共用体?11.内存共享共用体成员共享同一个内存空间,只允许一个成员在同一时间被使用。22.数据类型转换共用体可以将不同数据类型的值存储在同一个内存位置,实现数据类型的灵活转换。33.节省内存空间共用体可以有效利用内存空间,因为所有成员共享同一个内存区域,从而减少内存占用。定义共用体的语法1关键字union使用union关键字定义共用体。2类型声明声明共用体类型并指定成员变量类型。3成员变量定义成员变量,每个成员变量占用的内存空间相同。共用体的语法类似于结构体,区别在于关键字不同,共用体使用union关键字。共用体类型声明后,需要定义成员变量类型,每个成员变量占据相同的内存空间,因为它们共享同一块内存区域。共用体成员的访问共用体变量中,所有成员共享相同的内存空间。这意味着,在同一时间,只能访问共用体的其中一个成员。1选择成员使用成员名访问2内存访问共用体成员共享同一内存地址3最新值访问最后赋值的成员共用体变量的声明1语法共用体变量的声明与结构体变量类似,使用关键字union后跟共用体类型名,再跟变量名。2示例unionData{inti;floatf;charc;};unionDatadata;3内存分配共用体变量只分配一个足够大的内存空间来容纳所有成员中最大的成员。共用体变量的初始化直接初始化在声明共用体变量时,可以同时对其进行初始化。初始化值应与共用体中第一个成员的类型一致。间接初始化可以使用赋值语句对共用体变量的成员进行初始化。只有共用体变量中一个成员被初始化,其他成员的值将被覆盖。结构体成员初始化共用体变量的成员可以是结构体类型。初始化结构体成员时,需要遵循结构体初始化的规则。共用体变量作为函数参数1传递共用体变量地址使用指针传递2函数内部修改共用体值通过指针访问成员3返回值为共用体类型函数返回共用体变量将共用体变量作为函数参数传递时,需要注意指针的使用。函数内部可以通过指针访问共用体成员,并修改共用体变量的值。此外,函数的返回值也可以是共用体类型,以便将共用体变量的值返回给调用函数。共用体变量作为函数返回值当函数返回一个共用体变量时,实际上返回的是该共用体变量中当前活动成员的值。1函数定义定义返回共用体类型的函数2函数调用调用函数,获取返回值3返回值传递将活动成员的值作为返回值传递4接收返回值接收函数返回的共用体值例如,如果函数返回一个包含int和char类型的共用体,而当前活动成员是int类型,那么返回值将是该int类型的数值。共用体的嵌套1定义可以在共用体中定义其他共用体类型,形成嵌套结构。嵌套的共用体成员共享相同的内存空间。2访问成员使用点运算符“.”访问嵌套共用体的成员。例如,共用体A中包含共用体B,访问B的成员需要使用A.B.成员名。3应用嵌套的共用体可以用于表示复杂的结构,例如数据结构中的节点。例如,一个节点可能包含一个数据部分和一个指向下一个节点的指针。共用体数组1定义声明一个共用体类型的数组,每个元素都拥有共用体的所有成员。2内存分配数组的所有元素共享同一内存空间。3访问通过数组下标访问每个元素的成员。4应用存储多种数据类型,节省内存空间。例如,可以定义一个共用体数组来存储不同类型的几何图形信息,例如圆形、矩形和三角形。由于这些几何图形的结构不同,但它们都共享一些共同的属性,例如位置和颜色,因此可以使用一个共用体来存储它们。共用体指针1指针定义共用体指针指向共用体变量的内存地址,可以像访问普通指针一样访问共用体。2成员访问通过指针访问共用体成员时,需要先解引用指针,然后使用点运算符或箭头运算符。3内存管理共用体指针指向的内存区域的大小取决于共用体中最大成员的大小,而不是所有成员大小之和。匿名共用体节省内存匿名共用体可以节省内存空间,因为多个成员共享同一个内存地址。灵活使用匿名共用体可以根据需要使用不同的成员,提高代码的灵活性。简化代码匿名共用体可以简化代码结构,提高代码的可读性和可维护性。结构体和共用体的区别11.内存分配结构体为每个成员分配独立的内存空间,而共用体所有成员共享同一个内存空间。22.数据存储结构体存储多个不同类型的数据,而共用体存储多个数据类型中的一个,每次只能使用一个成员。33.成员访问结构体成员可以通过结构体名加成员名的方式访问,共用体成员可以通过共用体名加成员名的方式访问。44.使用场景结构体用于存储多个相关数据,共用体用于节省内存空间或在同一内存位置存放不同类型数据。结构体和共用体的应用场景数据存储结构体可以用于组织和管理不同类型的数据,例如存储学生信息,商品信息等。游戏开发结构体可以用于存储游戏角色属性,例如生命值、攻击力等。网络编程共用体可以用于处理不同类型的网络数据包,例如TCP、UDP数据包。图形界面结构体可以用于存储窗口、按钮等GUI元素的属性和方法。注意事项类型匹配结构体或共用体成员类型要与赋值语句中的变量类型匹配。内存对齐结构体和共用体成员在内存中按照一定的规则对齐,以提高访问效率。位域使用位域可以用来节省内存空间,但使用时需要注意位域的大小和位置。指针使用使用结构体或共用体指针时,需要确保指针指向的是有效的内存地址。课后练习本节课的课后练习是为了巩固结构体和共用体的概念,并鼓励你实践。你将需要编写代码来解决具体的问题。你可以选择编写一个小型程序,或者完成一些简单的代码片段。例如,你可以尝试编写一个程序来管理学生信息,包括姓名、学号、成绩等。你还可以编写一个程序来模拟现实世界
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年甜品店租赁合同
- 2024年锂电能源产品供需合同3篇
- 2025年度太阳能空调采购、安装与节能补贴合同3篇
- 2025版防火性能油漆材料供应合同
- 2024年生物制药研发成果转让合同协议书3篇
- 2025版钢结构工程挂靠施工合同3篇
- 2025版井筒工程技术服务与地质勘探及施工管理合同3篇
- 2025版快递物流信息化服务合同集合3篇
- 2024年环境治理项目担保合同担保范围与环保政策3篇
- 2025年度安置房产权保险合同范本3篇
- 2025支部会议记录范文
- 部队保密安全课件
- 园林施工技术创新-洞察分析
- 湖北省黄冈市2023-2024学年高二上学期期末调研考试 地理 含解析
- 医院窗帘、隔帘采购 投标方案(技术方案)
- 期末检测卷(试题)-2024-2025学年三年级上册数学人教版
- 图书馆管理系统答辩
- 先天性心脏病封堵术护理
- 2024北京初三(上)期末语文汇编:记叙文阅读
- 三级安全教育试题(公司级、部门级、班组级)
- 2024年金融工作会议
评论
0/150
提交评论