第十章 结构体、联合体与枚举

合集下载

最新第10章结构体、枚举和共用体类型PPT课件

最新第10章结构体、枚举和共用体类型PPT课件

/*输出*/
{printf("number:%6d\n ", stu[i].number);
printf("name: %s\n", stu[i].name);
printf("score: ");
for(k=0;k<4;k++)
printf("%6.2f" , stu[i].score[k]);
printf("\ntotal=%10.2f average=%10.2f\n ", stu[i].total, stu[i].ave);
for (i=0;i<N;i++)
/*输出*/
output(&stu[i]);
}
10.2结构体和函数
结构体数组作函数参数
向函数传递结构体数组实际也是传递数组的首地址。形 参数组与实参数组使用共同的内存单元。
函数形参、实数是同类型的结构体数组名或结构体指针。
【例10.5】重新编写例10.4。
#define N 50
for(k=0;k<4;k++)
scanf("%f",&stu[i].score[k]); stu[i]. total = total(stu[i].score,4); /*计算总成绩*/ stu[i].ave=average(stu[i].total,4); /*计算平均成绩*/
} for (i=0;i<N;i++)
struct student
{int number;
/*学号*/
char name[10];
/*姓名*/

结构体、共用体与枚举

结构体、共用体与枚举

9.1.2 结构体变量的说明
结构体变量的说明有三种方法: 1.用已定义的结构体类型名定义变量。
例如: struct person student,worker;
/* 定义了两个结构体变量student和worker */
用上面的结构体类型还可再定义变量: struct person men,women;
student.birthday.year
/* 基本成员year ,相当于一个整型变量 */
9.1.4 结构体变量的引用
2.结构体变量的赋值、输入和输出 结构体变量的输入和输出也都只能对其成员进行
3.同一类型的结构体变量可相互赋值 由于结构体各个成员的类型不同,对结构体变量 赋值也只能对其成员进行 同类型的两个结构体变量之间可以整体赋值 (请比较数组之间不能整体赋值) stud1=stud 2;
9.1 结构体
【问题】什么是结构体类型?什么是结构体变量?结 构体类型与数组类型有什么区别和联系?
姓名 年龄 性别 身份 民族 住址 电话
证号
号码
(字符数组) (整型) (字符) (长整型) (字符) (字符数组) (长整型)
9.1.1 结构体类型的定义
结构体类型的定义形式为: struct 类型名 {成员项表列}; 例如包含上图中全部类型数据的结构体类型的定义如下: struct person /* 结构体类型名 */ { char name[20]; /* 以下定义成员项的类型和名字 */ int age; char sex; long num; char nation; char address[20]; long tel; };
本课件PPT仅供大家学习使用 学习完请自行删除,谢谢! 本课件PPT仅供大家学习使用 学习完请自行删除,谢谢! 本课件PPT仅供大家学习使用 学习完请自行删除,谢谢! 本课件PPT仅供大家学习使用 学习完请自行删除,谢谢!

结构体、联合体、枚举

结构体、联合体、枚举

联合体与结构体类似,但联合体所有成员 共享同一块内存空间,因此同一时间只能 存储其中一个成员的值。
枚举编程实践
定义枚举类型
使用`enum`关键字定义枚举类 型,指定枚举中各个常量的名
称和值。
创建枚举变量
定义枚举类型后,可以创建该 类型的变量,用于存储枚举常 量中的一个值。
使用枚举常量
在程序中使用枚举常量时,可以 直接使用其名称,编译器会自动 将其转换为对应的整数值。
特点
联合体的所有成员共 享同一块内存空间, 其大小等于最大的成 员。
联合体的成员可以是 任何数据类型,包括 基本数据类型、结构 体、数组等。
联合体中的成员不能 同时被访问,即同一 时间只能使用其中一 个成员。
联合体的作用
0102Βιβλιοθήκη 03节省内存空间由于联合体的所有成员共 享同一块内存空间,因此 可以节省内存空间。
结构体的创建与初始化
01
stu2.age = 21;
02
stu2.score = 90.5;
03
// 输出结构体变量的值
结构体的创建与初始化
要点一
printf("Student 1
Name = %s, Age = %d, Score = %.1fn", , stu1.age, stu1.score);
联合体
联合体允许在相同的内存位置存储 不同的数据类型,但一次只能使用 其中之一。适用于节省空间或实现 特殊的数据处理逻辑。
枚举
枚举用于定义一组命名的整型常量, 适用于表示一组相关的值或状态。
优缺点对比
优点
可以包含多个不同类型的数据,方便数据管理和操作;提高了代码的可读性和可维护性。

C语言程序设计 赵山林 高媛 第十章 结构体联合体与枚举新

C语言程序设计 赵山林 高媛 第十章 结构体联合体与枚举新

,称为数据域;另一部分存放该结点指向下一个结点的指针,称为指
针域。
Page
Page 18
18
10.4 链表
内存的动态分配与释放函数 1.动态分配内存空间函数malloc( ) malloc( )的函数原型: void *malloc(unsigned int size)
第十章 结构体、联合体与枚举
(1)先定义结构体类型,再定义结构体类型变量。 一般形式为: struct 结构体类型名
{
类型说明符 成员名1; 类型说明符 成员名2; … 类型说明符 成员名n; } 结构体变量名表列; struct 结构体类型名 结构体变量名表列;
Page
Page 5
5
10.1 结构体类型及结构体变量
结构体变量 1.结构体变量的定义
将数组元素的每一个初值书写在小集合内,各个小集合构成大集合,
然后将大集合初始化给一维结构体数组。另一种方法是将数组每个元 素的每一个初值按照数组元素中的各个成员在内存中的存放顺序书写
在集合内,然后将集合初始化给一维结构体数组。
Page
Page 14
14
10.3 结构体指针
指向结构体变量的指针变量
3.直接定义枚举变量 enum {sun,mon,tue,wed,thu,fri,sat} day1,day2;
C语言程序设计
更多课程配套课件资源请访问在线教务 结构体、联合体与枚举
10.1 结构体类型及结构体变量
结构体类型的定义 结构体类型定义的一般形式为: struct 结构体类型名 { 类型说明符 成员名1;
10.3 结构体指针
结构体指针变量做函数形参
第十章 结构体、联合体与枚举

C语言程序设计 第10章 结构体、共用体和枚举

C语言程序设计 第10章 结构体、共用体和枚举

result: Li: 5 Zhang: 1 Wang: 4
10.5 结构体指针
【例10-3】 通过指向结构体变量的指针输出该结构体变量的信息。 #include <stdio.h> #include <string.h> struct student { int num; char name[20]; char sex; double score; }; typedef struct student stud; void main() { stud std; // 定义struct student类型的变量 stud *stdptr; // 定义指针变量 stdptr = &std; std.num = 10001; strcpy(, "Li Jun"); std.sex = 'M'; std.score = 89.5; printf("num: %d\nname: %s\nsex: %c\nscore: %f\n", stdptr->num, stdptr->name, stdptr->sex, stdptr->score); }
10.3 结构体类型和结构体变量
10.3.4 结构体变量的初始化
【例10-1】 对结构体变量进行初始化。 #include <stdio.h> struct student { int num; char name[20]; char sex; char address[30]; }; typedef struct student stud; int main() { stud std = {10001, "Li Jun", 'M', "Kunming"}; printf("No.: %d\nname: %s\nsex: %c\naddress: %s\n", std.num, , std.sex, std.address); return 0; }

结构体、共用体和枚举型

结构体、共用体和枚举型

优缺点比较
优点
节省内存空间;可以方便地处理多种数据类型。
缺点
由于所有成员共享同一块内存空间,因此每次只能使用其中一个成员;使用不 当可能导致数据丢失或混乱。
优缺点比较
优点
增加了代码的可读性和可维护性;提供了类型检查,减少了 错误的可能性。
缺点
相对于整数类型,枚举型的处理速度较慢;占用内存空间相 对较大。
枚举型
枚举型通常用于定义一组命名的 整数值,这些值可以增加代码的 可读性和可维护性。例如,可以 使用枚举型来定义一周中的天数 或一个月中的月份。
优缺点比较
优点
可以方便地组合和管理多个不同类型 的数据;提供了数据的封装和隐藏, 增加了代码的安全性;可以方便地传 递和返回多个值。
缺点
相对于基本数据类型,结构体的处理 速度较慢;占用内存空间相对较大。
共用体在节省内存空间中的应用
节省存储空间
共用体允许在相同的内存位置存储不同的数据类型,通过共享内 存空间来节省存储空间。
实现多态性
共用体可以在不同的上下文中表示不同的数据类型,从而实现一 种多态性的效果。
处理异构数据
当需要处理不同类型的数据时,可以使用共用体来统一表示这些 数据,简化数据处理的过程。
实现多态性
通过共用体,可以在相同 的内存空间中存储不同类 型的数据,从而实现多态 性。
方便数据处理
在某些情况下,使用共用 体可以更方便地处理数据。
共用体的声明与定义
声明
定义
初始化
访问成员
注意事项
在C语言中,可以使用 `union`关键字来声明一 个共用体。例如: `union Data { int i; float f; char str[20]; };`

结构体、联合体、链表、枚举和位域

结构体、联合体、链表、枚举和位域
int class;
char office[10];
}; 定义了一个名为 perdata 的联合类型,它含有两个成员,一个为整型,成员名为 class;另一个为字符数组,数组名为 office。联合定义之后,即可进行联合变 量说明,被说明为 perdata 类型的变量,可以存放整型量 class 或存放字符数组 office。 二、联合变量的说明 联合变量的说明和结构变量的说明方式相同,也有三种形式。即先定义,再说明; 定义同时说明和直接说明。以 perdata 类型为例,说明如下: union perdata {
char name[10];
int age;
char job;
union {
int class;
char office[10];
} depa; }body[2];
int n,i;
for(i=0;i<2;i++)
{
printf("input name,age,job and department\n");
但是 stu2 则必须先 stu2 s2; 然后 s2.a=10; =========================================== 3 掌握上面两条就可以了,不过最后我们探讨个没多大关系的问题 如果在 c 程序中我们写: typedef struct { int num; int age; }aaa,bbb,ccc; 这算什么呢? 我个人观察编译器(VC6)的理解,这相当于 typedef struct { int num; int age; }aaa; typedef aaa bbb; typedef aaa ccc; 也就是说 aaa,bbb,ccc 三者都是结构体类型。声明变量时用任何一个都可以,在 c++中也是如此。但是你要注意的是这个在 c++中如果写掉了 typedef 关键字, 那么 aaa,bbb,ccc 将是截然不同的三个对象。 第四篇:C/C++中 typedef struct 和 struct 的用法 struct _x1 { ...}x1; 和 typedef struct _x2{ ...} x2; 有什么不同? 其实, 前者是定义了类_x1 和_x1 的对象实例 x1, 后者是定义了类_x2 和_x2 的 类别名 x2 , 所以它们在使用过程中是有取别的.请看实例 1. [知识点] 结构也是一种数据类型, 可以使用结构变量, 因此, 象其它 类型的变量一样, 在使用结构变量时要先对其定义。 定义结构变量的一般格式为: struct 结构名 { 类型 变量名; 类型 变量名; ... } 结构变量; 结构名是结构的标识符不是变量名。 另一种常用格式为: typedef struct 结构名 { 类型 变量名; 类型 变量名; ...

结构体、共用体和枚举类型数据余

结构体、共用体和枚举类型数据余

03
枚举类型概述
枚举类型定义与特点
定义:枚举类型是一种用户自定义的数 据类型,它允许用户为一组整数值分配 有意义的名称。
枚举类型中的标识符具有常量性质,不 能被赋值。
枚举类型属于构造类型,而不是基本类 型。
特点
枚举类型的变量只能取枚举说明结构中 的某个标识符所代表的值。
枚举变量声明与赋值
声明
枚举变量的声明与结构体变量的声明类似,需要指定枚举类型名称和变量名称。
通过函数和模块化设计,将重复的代码和数 据封装成独立的函数或模块,避免数据的重 复出现。例如,将常用的功能和数据处理过 程封装成函数库或模块,提高代码的复用性 和可维护性。
05
结构体、共用体和枚举类型在数据 余处理中应用
结构体在数据余处理中作用
数据整合
结构体可以将多个不同类型的数据整合在一 起,形成一个新的数据类型,方便数据的统 一管理和处理。
赋值
枚举变量可以被赋予枚举说明结构中的某个标识符所代表的值,也可以被赋予 与这些值对应的整数值。
枚举类型应用场景
用于表示一组固定的、预定义 的常量值,如一周的七天、颜
色名称等。
用于替代魔法数字,提高代码 的可读性和可维护性。
用于定义状态机中的状态,使 得状态转换更加清晰和易于理 解。
用于实现位标志,通过组合不 同的标志位来表示不同的选项 或状态。
提高可读性
枚举类型的名称通常具有描述性,可以提高代码的可读性和可维 护性。
06
总结与展望
结构体、共用体和枚举类型重要性总结
结构体(Struct)重要性 结构体允许将多个不同类型的数据组合成一个单一类型,使得数据处理更为方便。
结构体可以提高代码的可读性和可维护性,降低出错率。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单向链表算法 1.单向链表的建立
第十章 结构体、联合体与枚举
链表的建立是从空链表出发,逐渐增加结点的过程。 2.单向链表的输出 链表的输出是将一个已建立好的链表中各个结点的数据项全部地或部 分地输出显示。
3.单向链表的查找
链表的查找是指在已知链表中查找值为某指定值的结点。 4.单向链表的删除
链表的删除是指从单向链表中按指定的数据项删除一个或几个结点。
Page 24
10.5 联合体
联合体变量的定义 (2)定义联合体类型的同时定义联合体变量 例如: union udata {
第十章 结构体、联合体与枚举
int i;
char c; float f; }u,*p;
Page 25
10.5 联合体
联合体变量的定义 (3)直接定义联合体变量 例如: union {
识符命名。
将数组元素的每一个初值书写在小集合内,各个小集合构成大集合,
然后将大集合初始化给一维结构体数组。另一种方法是将数组每个元 素的每一个初值按照数组元素中的各个成员在内存中的存放顺序书写
在集合内,然后将 结构体指针
指向结构体变量的指针变量
第十章 结构体、联合体与枚举
5.单向链表的插入 链表的插入是指将一个已知结点按某个数据项插入到已知链表中,插 入前链表一般是按某个数据项顺序排好序的。
Page 22
10.5 联合体
联合体类型的定义
第十章 结构体、联合体与枚举
联合体类型的定义方式与结构体很类似,定义的一般形式为: union联合体类型名 { 类型说明符 成员名1;
在内存的动态存储区中分配长度为size个字节连续空间。若成功分配
,则返回一个指向所分配内存空间低字节的指针;若不成功则返回零 指针NULL。
为了说明所分配的内存空间存储何种类型的数据,函数调用后应使用
类型的强制转换运算符对返回值进行强制类型转换来确定所分配内存 中存储的数据的类型。
Page 18
10.4 链表
,称为数据域;另一部分存放该结点指向下一个结点的指针,称为指
针域。
Page 17
10.4 链表
内存的动态分配与释放函数 1.动态分配内存空间函数malloc( ) malloc( )的函数原型: void *malloc(unsigned int size)
第十章 结构体、联合体与枚举
函数的形参是无符号整型,返回值是一个无值型指针。函数的功能是
间。若成功分配,则返回一个指向所分配内存空间低字节的指针;若 不成功则返回零指针NULL。
Page 19
10.4 链表
内存的动态分配与释放函数 3.释放内存空间函数free( ) free( )的函数原型: void free(void *buffer)
第十章 结构体、联合体与枚举
函数的形参是一个无值型指针,函数无返回值。函数的功能是释放
第十章 结构体、联合体与枚举
Page 12
10.2 结构体数组
结构体数组的初始化
第十章 结构体、联合体与枚举
结构体数组初始化的方法与数组类似。结构体数组中包含有多个元素 ,每一个元素又是结构体类型的,因此在初始化时要仔细考虑数组的 维数、结构体成员的顺序、类型之间的对应关系。 一维结构体数组初始化的方法类似于二维基本类型数组。一种方法是
类型说明符 成员名2;
… …
类型说明符 成员名n; };
Page 23
10.5 联合体
联合体变量的定义 (1)先定义联合体类型,再定义联合体变量 例如: union udata {
第十章 结构体、联合体与枚举
int i;
char c; float f; }; union udata u,*p;
Page 16
10.4 链表
单向链表的概念
第十章 结构体、联合体与枚举
链式存储结构不需要一组连续的存储单元,它的数据元素以结点的形 式分散存放在存储空间中。单向链表中为了使数据元素保持逻辑上的 关系,每个结点必须知道其后继结点的地址。 在单向链表中,每个结点由两部分组成:一部分存放结点的数据信息
内存的动态分配与释放函数 2.动态分配内存空间函数calloc( ) calloc( )的函数原型:
第十章 结构体、联合体与枚举
void *calloc(unsigned int num,unsigned int size) 函数的形参是2个无符号整型,返回值是一个无值型指针。函数的功
能是在内存的动态存储区中分配长度为num*size个字节连续存储空
可以通过指向联合体的指针来引用联合体的成员。其格式如下:
联合体指针->成员名
Page 27
10.6 枚举
枚举类型的定义
第十章 结构体、联合体与枚举
枚举类型通过枚举一系列有序的标识符来定义。枚举类型定义的一般 格式为: enmu枚举类型名{枚举分量名1,枚举分量名2,…,枚举分量名n};
Page 28
buffer所指向的内存空间。被释放的存储空间是由malloc( )函数或
calloc( )函数所分配的。
Page 20
10.4 链表
单向链表算法 1.单向链表的建立
第十章 结构体、联合体与枚举
链表的建立是从空链表出发,逐渐增加结点的过程。 2.单向链表的输出 链表的输出是将一个已建立好的链表中各个结点的数据项全部地或部 分地输出显示。
级一级地运算,直到找到最低一级的成员。
Page 9
10.1 结构体类型及结构体变量
结构体变量做函数形参
第十章 结构体、联合体与枚举
结构体变量做函数形参时,函数调用时实参只能是同类型的结构体变 量,遵循单向值传递规则。
Page 10
10.2 结构体数组
结构体数组的定义
第十章 结构体、联合体与枚举
结构体指针变量做函数形参
第十章 结构体、联合体与枚举
结构体指针变量做函数形参,函数调用时由实参传向形参的只是地址 值,从而减少了时间和空间的开销。指向结构体的指针变量做函数的 形参,要求对应的主调函数的实参为相同结构体类型的指针或结构体 变量的地址,被调函数就可以通过形参指针变量来访问主调函数中的 结构体变量或结构体数组元素。
结构体指针−>成员名
Page 14
10.3 结构体指针
指向结构体数组元素的指针
第十章 结构体、联合体与枚举
同前面讨论的指向数组元素的指针一样,结构体指针也可以指向结构 体数组元素。当结构体指针指向数组元素之后,就可以使用该指针遍 历结构体数组中的所有元素。
Page 15
10.3 结构体指针
结构体数组的定义方法与其他整型数组、实型数组和字符型数组的定 义方法类似,只是结构体数组中每一个元素的数据类型都是结构体类 型。同一个结构体数组中的数组元素具有相同的结构体类型。 结构体数组的定义与结构体变量的定义类似,可以使用3种形式中的
任何一种形式。
Page 11
10.2 结构体数组
结构体数组的引用 访问结构体数组元素的成员的一般格式为: 结构体数组名[下标].成员名
10.6 枚举
枚举变量的定义和引用 1.先定义枚举类型,再定义枚举变量 enum week {sun,mon,tue,wed,thu,fri,sat}; enum week day1,day2; 2.定义枚举类型的同时定义枚举变量
第十章 结构体、联合体与枚举
enum week {sun,mon,tue,wed,thu,fri,sat} day1,day2;
结构体变量 3.结构体变量的初始化
第十章 结构体、联合体与枚举
结构体变量的初始化和一维数组的初始化类似。将各个成员的初值用 一对花括弧{}括起来,括弧内各初值的数据类型、顺序要和结构体类 型中的成员一致,数据项间用逗号分隔。初始化时按照左对应关系赋
初值,如果初值的个数少于结构中成员的个数,其余成员将自动初始
指针、数组、联合体等类型。结构体成员名同样遵循标识符命名规则 ,可以与程序中其他变量名相同,互不干扰。
Page 3
10.1 结构体类型及结构体变量
结构体变量 1.结构体变量的定义
第十章 结构体、联合体与枚举
(1)先定义结构体类型,再定义结构体类型变量。 一般形式为: struct 结构体类型名
结构体变量所占内存单元的首地址称为结构体变量的指针。指向一个 结构体变量的指针变量,称为结构体指针变量。结构体指针变量中的 值是所指向的结构体变量的指针。 结构体指针变量定义的一般形式为:
struct结构体类型名 *结构体指针变量名;
C语言中为了直观而方便的通过指针来引用结构体成员,专门设置了 指向运算符“−>”来访问结构体成员,一般形式为:
{
类型说明符 成员名1; 类型说明符 成员名2; … 类型说明符 成员名n; } 结构体变量名表列; struct 结构体类型名 结构体变量名表列;
Page 4
10.1 结构体类型及结构体变量
结构体变量 1.结构体变量的定义
第十章 结构体、联合体与枚举
(2)在定义结构体类型的同时定义结构体变量。 一般形式为: struct 结构体类型名
{
类型说明符 成员名1; 类型说明符 成员名2; … 类型说明符 成员名n; } 结构体变量名表列;
Page 5
10.1 结构体类型及结构体变量
结构体变量 1.结构体变量的定义
第十章 结构体、联合体与枚举
(3)在定义结构体类型的同时定义结构体变量。 一般形式为: struct
{
类型说明符 成员名1; 类型说明符 成员名2; … 类型说明符 成员名n; } 结构体变量名表列;
化为0。
Page 8
10.1 结构体类型及结构体变量
结构体嵌套
相关文档
最新文档