11结构体、联合体与枚举类型

合集下载

C#程序设计 第11章 结构体、联合体与位运算

C#程序设计  第11章  结构体、联合体与位运算

第11章结构体、联合体与位运算本章介绍结构体、联合体及枚举类型等三种新的构造型数据类型以及位运算的基本方法,包括结构体的含义;结构体类型变量的定义、引用及初始化方法;结构体数组的定义和数组元素的引用;结构体类型指针的概念及链表的基本操作方法;联合体的含义;联合体类型变量的定义方法;枚举类型的定义; TYPEDEF的作用和位运算的基本方法等。

11.1 结构体类型通过前面有关章节的学习,我们认识了整型、实型、字符型等C语言的基本数据类型,也了解了数组这样一种构造型的数据结构,它可以包含一组同一类型的元素。

但仅有这些数据类型是不够的。

在实际问题中,有时需要将不同类型的数据组合成一个有机的整体,以便于引用。

例如,在新生入学登记表中,一个学生的学号、姓名、性别、年龄、总分等,它们属于同一个处理对象,却又具有不同的数据类型。

如图11-1。

每增加、删减或查阅一个学生记录,都需要处理这个学生的学号、姓名、性别、年龄、总分等数据,因此,有必要把一个学生的这些数据定义成一个整体。

图11-1虽然数组作为一个整体可用来处理一组相关的数据,但不足的是,一个数组只能按序组织一批相同类型的数据。

对于一组不同类型的数据,显然不能用一个数组来存放,因为数组中各元素的类型和长度都必须一致。

为了解决这个问题,C语言中给出了另一种构造数据类型——“结构体”。

11.1.1 结构体类型与结构体变量结构体是一种构造类型,它由若干“成员”组成。

每一个成员可以是一个基本数据类型或者又是一个构造类型。

结构体既然是一种构造而成的数据类型,那么在使用之前必须先定义它,如同在调用函数之前要先定义或声明一样。

定义一个结构体类型的一般形式为:struct 结构体名{ 成员1 类型1;成员2 类型2;...成员n 类型n;};“结构体”这个词是根据英文单词structure译出的。

结构体中的每个成员均须作类型说明,成员名的命名应符合标识符的书写规定,成员名可以与程序中的变量名同名,二者不代表同一对象,互不干扰。

结构体共同体和枚举型

结构体共同体和枚举型

访问共同体的成员同样使用成员 访问运算符“.”,但是由于共同 体成员共享内存,因此同一时间 只能访问其中一个成员的值。例 如,`union_var.member`。
访问枚举类型的变量时,可以 直接使用枚举常量名来赋值或 比较。例如,`enum_var = ENUM_CONSTANT` 或 `if (enum_var == ENUM_CONSTANT)`。
结构体(struct)
结构体是一种复合数据类型,它可以包含多个不同类型的数据成员。在内存中,结构体通 常占用连续的内存空间,每个数据成员按照定义的顺序依次存储。
共同体(union)
共同体也是一种复合数据类型,它允许在相同的内存位置存储不同的数据类型。但是,共 同体的所有成员共享同一块内存空间,因此它们的存储是覆盖的,即同一时间只能存储其 中一个成员的值。
结构体共同体和枚举型
$number {01}
目 录
• 结构体概述 • 共同体概述 • 枚举型概述 • 结构体、共同体和枚举型的比较 • 结构体、共同体和枚举型的应用
案例 • 总结与展望
01
结构体概述
定义与特点
01
结构体是一种用户自定 义的数据类型,允许将 不同类型的数据组合成
一个有机的整体。
02
结构体可以作为函数参数和返回值,实现数据 的整体传递和处理。
结构体的声明与定义
结构体的声明使用关键字`struct`,后面跟结构体的名称和数据成员的列表。 结构体的定义需要在声明之后进行,定义时要指定每个数据成员的类型和名称。
可以使用结构体变量来存储和操作结构体类型的数据。
02
共同体概述
定义与特点
枚举型
适用于定义一组具有固定整数值的常量的情况,例如表示一周的几天、颜色名称等。枚举类型可以提高 代码的可读性和可维护性,同时减少因使用魔法数字(硬编码的常量)而导致的错误。

C51的数据类型

C51的数据类型

C51的数据类型C51是一种常用的单片机型号,广泛应用于嵌入式系统和微控制器开发中。

在C51编程中,数据类型是非常重要的概念,它决定了变量在内存中的存储方式和所占用的空间大小。

本文将详细介绍C51的数据类型及其特点。

一、基本数据类型1. 位(bit):C51的最小存储单位是位,它只能存储0或1。

位类型的变量在内存中占用1位空间。

2. 位域(bit-field):位域是一种特殊的数据类型,它允许将一个字节中的位划分为多个字段,并为每个字段指定不同的位数。

位域可以节省内存空间,提高程序的执行效率。

3. 字节(byte):字节是C51中最基本的数据类型,它占用8位空间,可以存储-128到127之间的整数。

4. 无符号字节(unsigned byte):无符号字节是字节的一种特殊类型,它只能存储0到255之间的整数。

5. 半字(halfword):半字是由两个字节组成的数据类型,它占用16位空间,可以存储-32768到32767之间的整数。

6. 无符号半字(unsigned halfword):无符号半字是半字的一种特殊类型,它只能存储0到65535之间的整数。

7. 字(word):字是由四个字节组成的数据类型,它占用32位空间,可以存储-2147483648到2147483647之间的整数。

8. 无符号字(unsigned word):无符号字是字的一种特殊类型,它只能存储0到4294967295之间的整数。

二、扩展数据类型1. 长整型(long):长整型是C51中的扩展数据类型,它占用4个字节空间,可以存储更大范围的整数,从-2147483648到2147483647之间。

2. 无符号长整型(unsigned long):无符号长整型是长整型的一种特殊类型,它只能存储0到4294967295之间的整数。

3. 单精度浮点型(float):单精度浮点型是一种用于表示带小数部分的数值的数据类型,它占用4个字节空间,可以存储小数。

C51的数据类型

C51的数据类型

C51的数据类型引言概述:C51是一种常用的微控制器,广泛应用于嵌入式系统中。

在C51编程中,了解和正确使用数据类型是非常重要的。

本文将详细介绍C51的数据类型,包括基本数据类型、派生数据类型、数组和指针、结构体和联合体、枚举类型。

一、基本数据类型:1.1 位类型(bit):C51中最小的数据类型,只能存储0或1,用于表示开关状态等。

1.2 字符类型(char):用于存储一个字符,占用一个字节的内存空间,范围为-128到127。

1.3 整数类型(int):用于存储整数值,占用两个字节的内存空间,范围为-32768到32767。

二、派生数据类型:2.1 无符号整数类型(unsigned):用于存储非负整数值,范围为0到65535。

2.2 短整数类型(short):用于存储较小的整数值,占用一个字节的内存空间,范围为-128到127。

2.3 长整数类型(long):用于存储较大的整数值,占用四个字节的内存空间,范围为-2147483648到2147483647。

三、数组和指针:3.1 数组:C51中的数组是一种存储相同类型数据的集合,可以按照索引访问其中的元素。

数组的大小在声明时确定,可以是一维或多维的。

3.2 指针:指针是一种特殊的数据类型,用于存储内存地址。

在C51中,指针可以指向任何类型的数据。

通过指针,可以实现对内存中数据的直接访问和操作。

四、结构体和联合体:4.1 结构体:结构体是一种自定义的数据类型,可以将不同类型的数据组合在一起,形成一个新的数据类型。

结构体的成员可以是基本数据类型或其他结构体。

4.2 联合体:联合体是一种特殊的结构体,所有成员共享同一块内存空间。

联合体的大小取决于最大成员的大小,只能同时存储一个成员的值。

五、枚举类型:5.1 枚举类型:枚举类型用于定义一组命名的常量,可以提高程序的可读性。

在C51中,枚举类型的取值范围为整数类型。

总结:C51的数据类型包括基本数据类型(位类型、字符类型、整数类型)、派生数据类型(无符号整数类型、短整数类型、长整数类型)、数组和指针、结构体和联合体、枚举类型。

结构体、联合体、枚举

结构体、联合体、枚举

联合体与结构体类似,但联合体所有成员 共享同一块内存空间,因此同一时间只能 存储其中一个成员的值。
枚举编程实践
定义枚举类型
使用`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);
联合体
联合体允许在相同的内存位置存储 不同的数据类型,但一次只能使用 其中之一。适用于节省空间或实现 特殊的数据处理逻辑。
枚举
枚举用于定义一组命名的整型常量, 适用于表示一组相关的值或状态。
优缺点对比
优点
可以包含多个不同类型的数据,方便数据管理和操作;提高了代码的可读性和可维护性。

第11章 联合共用体和枚举类型

第11章  联合共用体和枚举类型

第11章 联合共用体和枚举类型前面讨论的结构体是由若干个不同数据类型的成员所组成的一种构造数据类型,它的每一个成员都占用一定的内存空间。

在实际使用中,组成构造类型的数据成员在其生命期的每一个时刻往往只需一个成员在内存中,为此,C 语言系统本着从节省内存的角度出发,提供了一种称为联合共用体的构造数据类型。

11.1 联合共用体联合共用体又称共用体或联合体,它与结构体一样,也是C 语言提供的一种构造数据类型,而联合共用体中各个成员不占用专门的内存空间,全体成员共用一块内存空间。

也就是说任何时刻,联合共用体的存储单元中只能存放它的一个成员的数据,而不同的时刻可以存放不同成员,甚至是不同数据类型的成员。

所谓的联合共用体就是指各成员联合起来共同占用一块内存存储空间。

联合共用体和结构体的存储比较如图11-1所示。

结构体struct student {int num; char name[8]; float score; }; 联合共用体 union student {int num; char name[8]; float score; };由此可见,“共用存储区域,每次只能放入它的一个成员”的特征是联合共用体与结构体的惟一区别。

只要牢记这一特征,我们就不妨把联合共用体看成是结构体的特例。

只要不与这个特征发生冲突,结构体中能使用的处理手段都可以在联合共用体中使用。

联合共用体类型的声明与结构体类型的声明非常相似,例如: union 联合共用体类型名 {类型 成员名1; 类型 成员名2; … };联合共用体变量的定义也与结构体变量的定义非常相似,例如: union data {图11-1 结构体与联合共用体的存储比较numscorename 14字节 (a) 结构体(b) 联合共用体int a;char b;float c;} x, y, z; /* 声明联合共用体的同时定义联合共同体变量x,y,z */union data n, m, r; /* 定义联合共用体变量n,m,r */或者:union {int a;char b;float c;} x, y, z; /* 匿名定义联合共同体变量x,y,z */前一个声明了类型名,又定义了变量;后一个没声明类型名,只定义了变量。

在st语言中枚举体 联合体 结构体区别

在st语言中枚举体 联合体 结构体区别

在C语言中,枚举体、联合体和结构体是用来定义新的数据类型的关键字。

它们都能够帮助程序员更好地组织数据,提高代码的可读性和可维护性。

在本文中,我们将深入探讨这三种数据类型的区别和特点。

一、枚举体(enum)1. 枚举体是一种由程序员定义的数据类型,用来表示一组有限的取值范围。

2. 在定义枚举体时,需要使用关键字enum,然后在花括号中列出枚举的取值。

3. 枚举体的每个取值都有一个对应的整数值,默认从0开始递增。

4. 枚举体可以用来定义一些常用的状态值,比如星期几、月份等。

5. 枚举体的定义形式如下:```enum Weekday {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};```二、联合体(union)1. 联合体也是一种由程序员定义的数据类型,用来表示相同的内存空间可以存储不同类型的数据。

2. 在定义联合体时,需要使用关键字union,然后在花括号中列出联合体的成员。

3. 联合体的大小等于其最大成员的大小。

4. 联合体的所有成员共享同一块内存,可以存储不同类型的数据。

5. 联合体可以用来节省内存空间,但在使用时需要谨慎,以避免数据混乱。

6. 联合体的定义形式如下:```union Data {int i;float f;char str[20];};```三、结构体(struct)1. 结构体是一种由程序员定义的复合数据类型,用来表示一组不同类型的数据。

2. 在定义结构体时,需要使用关键字struct,然后在花括号中列出结构体的成员。

3. 结构体的成员可以是不同类型的数据,可以是基本类型、数组、指针等。

4. 结构体的大小等于所有成员大小的总和,但可能会因为对齐规则而有所增加。

5. 结构体可以用来表示复杂的数据结构,比如学生信息、员工信息等。

6. 结构体的定义形式如下:```struct Student {int id;char name[20];float score;};```枚举体、联合体和结构体是C语言中用来定义新的数据类型的关键字,它们分别用来表示有限取值范围的枚举、共享内存空间的联合和复合数据类型的结构。

结构体、共用体和枚举型

结构体、共用体和枚举型

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

实训11 联合体与枚举类型

实训11 联合体与枚举类型

实训11 联合体与枚举类型区队:姓名:学号:(请将此文件名改为“学号_姓名11.doc”,通过电子邮件发送到dufenglei@邮箱)一、实训目的1、掌握联合体类型和变量的定义及应用;2、掌握结构体与联合体的嵌套及应用;3、掌握枚举类型和变量的定义及应用。

4、掌握枚举类型变量的输入和输出。

二、实训内容1、输入并运行如下程序,若有错误,请修改。

#include <stdio.h>void main(){union data{int a;float b;char c;} d;scanf("%d",&d.a);printf("%d\n",d.a);d.b=108.5;printf("%f\n",d.b);d.c=’P’;printf("%c\n",d.c);}(1)调试过程中遇到的问题及解决办法:(2)程序运行结果记录:思考:联合体与结构体的区别是什么?2、输入五位教师或学生的姓名、年龄、身份(学生或教师),若是学生还需输入成绩(整型),若是教师还需输入工资(实型),然后给所有学生的成绩增加5分,最后输出五位师生的最终信息。

(1)程序:(2)程序调试过程中发现的问题及解决办法:(3)程序运行结果:3、袋子中有红、黄、蓝、白和黑五种颜色的球若干个,从袋子中取出3个球,使用枚举类型编程求取到3个不同颜色球的所有取法(按取球顺序输出球的颜色)。

(1)程序:(2)程序调试过程中发现的问题及解决办法:(3)程序运行结果:输入:输出:三、实训体会和小结:。

结构体联合体和枚举类型

结构体联合体和枚举类型

程序演示
[例7.1]程序பைடு நூலகம்示
返回例题
返回7.1.2目录
7.1.3 结构数组
《 语 言 程 序 设 计 》
(Visual C++ 6 0 环 境 ) .
返回本节目录
数组元素是结构体类型数据,这时的数组就是结构数组。
C
1.结构数组的定义 2. 结构数组的初始化 【例7.2】
1.结构数组的定义
《 C 语 言 程 序 设 计 》
(Visual C++ 6 0 环 境 ) .
返回7.1.3目录
结构数组的定义方法和结构变量相似,只需说明它为数组类型即可。 例如: struct stu { int num; char name[20]; char sex; float score; }; struct stu student[3]; 也可以直接定义一个结构数组或省略结构体名。
【例7.3】
返回1目录
【例7.3】(1)
《 C 语 言 程 序 设 计 》
(Visual C++ 6 0 环 境 ) .
【例7.3】通过结构指针引用结构体成员。程序名为l7_3.cpp。 #include "stdio.h" struct stu { int num; char name[20]; char sex; float score; }student1={102,"Zhang ping",'M',78.5},*s; main() { s=&student1; /*给结构指针变量赋值*/ printf("Number=%d\tName=%s\t",student1.num, ); printf("Sex=%c\tScore=%f\n", student1.sex, student1.score); printf("Number=%d\tName=%s\t",(*s).num,(*s).name); printf("Sex=%c\tScore=%f\n",(*s).sex,(*s).score); printf("Number=%d\tName=%s\t",s->num,s->name); printf("Sex=%c\tScore=%f\n",s->sex,s->score); }

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

结构体、联合体、链表、枚举和位域
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)重要性 结构体允许将多个不同类型的数据组合成一个单一类型,使得数据处理更为方便。
结构体可以提高代码的可读性和可维护性,降低出错率。

C语言期末复习整理 结构体、联合体、枚举

C语言期末复习整理 结构体、联合体、枚举

C语⾔言 - 结构体、联合体、枚举struct - 结构体结构体是由⼀一系列列具有相同类型或不同类型的数据构成的数据集合。

定义结构体结构体可以定义在主函数外,也可以定义在主函数内。

和定义函数⼀一样,只有在定义下⽅方的代码才能够识别,在上⽅方的代码需要申明之后再使⽤用。

结构体的定义⽅方式如下:struct结构体名称{变量量类型变量量名;变量量类型变量量名;...}结构体变量量名;例例如⼀一个统计学⽣生成绩的结构体,它包含了了 id, name, math_score, c_score, english_score 等内容:struct stu{char id[20];char name[20];double math_score;double c_score;double english_score;}s[10];定义完结构体之后,我们就可以在其他地⽅方使⽤用:struct stu a;结构体变量量struct stu *p结构体指针struct stu s[10];结构体数组struct stu func()返回⼀一个结构体类型的函数结构体的赋值在初始化时,我们可以直接通过{和}来为结构体赋值,赋值的顺序就是定义的顺序:struct stu a = {"123", "Aaron", 77, 89, 88};struct stu b[2] = {{"456", "Candy", 87, 86, 72}, {"789", "David", 67, 99, 78}}在初始化之后,我们就不能够直接对结构体进⾏行行整体赋值了了,⽽而只能⼀一次修改其中的某⼀一项值:struct stu *p, a = {"123", "Aaron", 77, 89, 88};p =&a; // p为结构体指针a.math_score =79; // 结构体变量量使⽤用.来访问内容(*p).c_score =87;p->english_score =92; // 结构体指针可以使⽤用->来代替(*p).访问内容printf("%s %s %lf %lf %lf\n", a.id, , a.math_score, a.c_score,a.english_score);两个同类型的结构体变量量是⽀支持赋值的,比如下⽅方的代码就直接将 b 的每个元素的值赋给了了 a :struct stu a = {"456", "Candy", 87, 86, 72};struct stu b = {"789", "David", 67, 99, 78};a = b;printf("%s %s %lf %lf %lf\n", a.id, , a.math_score, a.c_score,a.english_score);union - 联合体联合体的定义⽅方法与规则与结构体类似,因此这⾥里里就不再重复。

C语言结构体,枚举,联合体详解

C语言结构体,枚举,联合体详解

C语⾔结构体,枚举,联合体详解⽬录1.什么是结构体、枚举、联合体2.定义结构体2.1 包含结构体成员变量、variable2.2 tag、结构体成员变量2.3 ⽤结构体声名变量2.4 ⽤typedef 创建新类型2.5 两个结构体相互包含2.6 结构体变量初始化2.7 结构体指针3.枚举3.1 定义⽅式3.2 为什么⽤枚举3.3 枚举变量的定义3.4 实例3.5 枚举实际⽤途4.联合体4.1 与结构体区别4.2 定义总结1.什么是结构体、枚举、联合体结构体(struct)是由⼀系列具有相同类型或不同类型的数据项构成的数据集合,这些数据项称为结构体的成员。

如下⾯的student结构体包含三个成员,分别是name、num、age。

枚举(enum)是C语⾔的⼀种特殊类型。

当我们在编程中遇到定义⼀些固定长度或范围的数值时,可以考虑使⽤枚举类型。

使⽤枚举可以让我们的程序可读性更强、看起来更加直观。

举个例⼦,如果我们在编程中需要使⽤数字06分别表⽰星期⽇星期六,程序的可读性就不⾼,我们需要翻⼿册或者看程序注释才能知道每个数字具体代表什么意思。

如果我们使⽤枚举呢,基本上不需要看注释或⼿册就可知晓其⼤意。

联合体是⼀种结构。

它的所有成员相对于基地址的偏移量都是0。

此结构空间要⼤到⾜够容纳最宽的成员。

其对其⽅式适合其中所有成员。

123456// 创建结构体struct student{char *name; // 学⽣名字int num; // 学⽣学号intage; // 学⽣年龄};2.定义结构体12struct tag{ 成员变量...}variable;通常,tag 、结构体成员变量、variable 这3个部分⾄少要出现2个2.1 包含结构体成员变量、variable1234struct {char name[100];int age;}s1;//s1相当于对这个结构体声明了⼀个变量,可以在程序中直接调⽤s1相当于声明的全局变量。

结构体、共用体、枚举类型、typedef的区别

结构体、共用体、枚举类型、typedef的区别
jh.f). (2)共用体变量中只有最后一次赋值的成员有效,例如 jh.i 赋值 1,然后 jh.f 赋
值 2,此时引用 jh.i 不能取值,已经被 jh.f 覆盖了. (3)共用体变量的地址和它各成员的地址都是同一地址. (4)不能对共用体赋值或引用共用体的变量名取值,也不能在定义共用体变量
时对它初始化. (5)不能把共用体变量作函数参数,也不能使函数返回共用体变量,但可以使
引用: p = cd; 为枚举型变量 p 赋值 cd,p 的值就是成员表列中 cd 的值. 可以理解为 p = 2;,但是 2 是整型常量,要先强制类型转换,写成 p = (enum
jh)2;. 枚举型变量可以用作判断比较,if(p > (enum jh)1)或 if(p > bc).
-------------------------------------------------------------------------------------------------typedef
(2)直接定义结构体类型变量.方法为声明类型的同时定义变量,并且不写结构 体名 jh,这种方法用于只定义 1 次变量,而且每用这种方法定义 1 个变量,虽然都 为无名结构体类型,但不属于同一类型.
引用结构体类型变量: 结构体变量名.成员名
例:
struct jh{int ห้องสมุดไป่ตู้;char b;}a; a.b = 'z';
enum jh{ab=1,bc=2,cd=3,de=4}; 或
enum jh{de=4,ab,bc,cd}; 其中(de=4,ab,bc,cd)就是把最后一个 de 作为 0 放在最前面,然后改变值为最 后一位的值,第二开始就是从 1 算起了.

C程序设计ch11.结构体、联合共用体与枚举类型

C程序设计ch11.结构体、联合共用体与枚举类型

初始化:
struct students { int no; char name[15]; char sex; float aver; } stu[20]={{101, “Wan CX”, „m‟, 93.42}, {102, “Liao WF”, „f ‟, 85.68}, ……}; name
Wan CX Liao WF …
num name sex score[0] score[1] score[2] … score[9] aver
stu[0] stu[1] … stu[20]
[例] 计算学生的平均成绩。 num name sex score[0] score[1] score[2] … score[9] aver 1401 25BF f 89.5 93.5 86.0 … 78.0 88.42 stu[0] 注意结构成员数据的输入方法: 1402 A5D6 m 99.0 98.0 90.0 … 88.5 93.68 stu[1] 一律采用字符串方式输入,再利用函数转换数据类型。 … … … … … … … … … … void main() { 1420 6D58 int m k, j; 76.5 float 65.0 … 56.0 65.37 stu[20]char s[80]; sum; 74.0
#include <stdio.h> struct students { int num; // 学号 char *name; // 姓名 char sex; // 性别 float score[10]; // 10门课程成绩 float aver; } stu[20]; // 用于存放20个学生的成绩表
成绩表
struct scores { char grade[20]; long number; char name[20]; float os; float datastru; float compnet; };

C51的数据类型

C51的数据类型

C51的数据类型C51是一种广泛应用于嵌入式系统开辟的单片机,其数据类型在程序设计中起着重要的作用。

了解C51的数据类型可以匡助开辟人员更好地理解和使用该单片机。

本文将详细介绍C51的数据类型,包括基本数据类型和派生数据类型。

一、基本数据类型1. 位(bit):C51中最小的数据单元是位,它只能表示0或者1。

位数据类型在嵌入式系统中时常用于对单个开关、状态或者标志进行处理。

2. 位域(bit-field):位域是将一个字节或者字中的位划分为多个字段,每一个字段可以有不同的位数。

位域的使用可以有效地节省内存空间。

3. 字节(byte):字节是C51中的基本数据类型,它占领8位,可以表示0到255之间的整数。

4. 无符号整数(unsigned int):无符号整数是一种不带符号的整数类型,可以表示0到65535之间的整数。

5. 有符号整数(signed int):有符号整数是一种带符号的整数类型,可以表示-32768到32767之间的整数。

6. 短整数(short int):短整数是一种占领16位的整数类型,可以表示-32768到32767之间的整数。

7. 长整数(long int):长整数是一种占领32位的整数类型,可以表示-2147483648到2147483647之间的整数。

8. 浮点数(float):浮点数是一种用于表示实数的数据类型,可以表示小数部份。

9. 双精度浮点数(double):双精度浮点数是一种占领64位的浮点数类型,可以表示更大范围和更高精度的实数。

二、派生数据类型1. 数组(array):数组是一种由相同类型的元素组成的数据结构,可以通过索引访问和操作其中的元素。

在C51中,数组的长度可以在声明时指定,也可以在运行时动态分配。

2. 结构体(struct):结构体是一种用户自定义的数据类型,可以将不同类型的变量组合在一起形成一个新的数据类型。

结构体的成员可以是基本数据类型或者其他派生数据类型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档