C 结构体,共同体和枚举解析
- 格式:ppt
- 大小:238.00 KB
- 文档页数:31
第十二讲结构体、共用体和枚举类型(C语言)第十二讲结构体、共用体和枚举类型本讲主要介绍C语言中的三种类型的定义和使用,其中两种是构造类型:结构体类型和共用体类型,一种是C语言的基本类型:枚举类型。
要求大家掌握结构体类型、共用体类型和枚举类型的变量的定义,掌握结构体类型和共用体类型变量及其成员的引用等基本操作,理解结构体数组的应用,理解结构体和共用体变量存储形式的不同,了解枚举类型变量的处理方式。
知识要点结构体类型的定义1. 结构体类型定义的一般形式2. 结构体类型定义中的注意事项结构体类型变量1. 结构体类型变量定义的三种方法2. 结构体类型变量的初始化3. 对结构体变量中成员的引用4. 对整个结构体变量的引用结构体数组1. 结构体数组定义的三种方法2. 结构体数组的初始化3. 对结构体数组元素的成员进行引用共用体1. 共用体类型和共用体变量定义的方式2. 共用体变量与结构体变量的区别3. 共用体变量成员的引用4. 共用体变量作为结构体变量的成员枚举类型1. 枚举类型和枚举变量定义的一般形式2. 枚举元素的处理§12.1 结构体类型的定义结构体类型定义的一般形式为:struct 结构体名{类型名1 成员名1;类型名2 成员名2;……类型名n 成员名n;};其中,struct是关键字,是结构体类型的标志。
结构体名是由用户定义的标识符,它规定了所定义的结构体类型的名称。
结构体类型的组成成分称为成员,成员名的命名规则与变量名相同。
§12.2 结构体类型变量一、结构体变量的定义定义结构体类型的变量有三种方法:1.先定义结构体类型,再定义变量。
注意:定义变量时,struct person必须在一起使用,它的用法与int、char等类型名的用法相同。
2.定义类型的同时定义变量。
3.直接定义结构体类型变量,省略类型名。
二、结构体变量的初始化将结构体变量各成员的初值顺序地放在一对大括号中,并用逗号分隔。
在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语言知识总结——宏,枚举,结构体,共用体1、define宏定义以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。
因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。
define定义的常量,预处理时只是直接进行了替换,,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
,因此在编译时它不对宏的定义进行检查,作用域不影响对常量的访问。
它的常量值只能是字符串或数字。
该命令有两种格式:一种是简单的常量宏定义, 另一种是带参数的宏定义。
不带参数的宏:#define< 名字 >< 值 > 要注意,没有结尾的分号,因为不是C的语句,名字必须是一个单词,值可以是各种东西,宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。
如有错误,只能在编译已被宏展开后的源程序时发现。
注意.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
宏定义其作用域为宏定义命令起到源程序结束。
如要终止其作用域可使用#undef命令带参数的宏:像函数的宏,一般的定义形式:带参宏定义的一般形式为:「#define 宏名」(形参表)字符串,也是没有结尾的分号,可以带多个参数,#define NB(a,b)((a)>(b)?(b):(a)), 也可以组合(嵌套)使用其他宏,注意带参数宏的原则一切都要有括号,参数出现的每个地方都要有括号。
带参数的宏在大型的程序的代码中使用非常普遍,在#和##这两个运算符的帮助下可以很复杂,如“产生函数”,但是有些宏会被inline函数代替(C++的函数)使用宏好处:“提高运行效”。
定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。
C语言——枚举类型定义符——typedef通过typedef创建一个新的类型,并为这个数据类型赋予一个名字,然后这个数据类型就可以再任何被允许的地方使用。
typedef int INTERGER;注意:通过typedef定义的标志符通常采用大写的形式。
例如:typedef char* STRING;STRING stringPtrAry[20];//char* stringPtrAry[20];枚举类型——enum枚举类型是一种基于标准整形类型的自定义类型。
在一个枚举类型中,每一个整形数值都被赋予一个标识符,而这个标识符就被称为枚举常量。
enum typeName{identifier list};关键字标志符枚举常量集合枚举名每一个枚举常量都被赋予一个整形数值。
如果程序员没有明确的位这些标识符赋值,编译器将自动为第一个标识符赋值为0,第二个为1,依次类推。
如果中间有一个元素被赋值,之后的元素值是前一元素值+1。
注意:枚举常量本质是个常量,不能再去定义一个同名的变量。
枚举类型——赋值C语言允许枚举常量赋予枚举常量(必须要是在这个常量前已经定义的枚举常量)和枚举变量、变量。
例如:enum color{RED, BLUE, GUEEN, WHITE};enum color x;x = BLUE;//1x = GUEEN;//2x = YELLOW;//错误,YELLOW不存在枚举变量可以赋予枚举常量,也可以赋予其他的常量,而且相互之间还可以进行运算,但是,C语言中并没有确保给枚举变量的赋值是合法的。
匿名枚举类型——常量如果在创建枚举类型的时候没有指定名字,那么这就是一个匿名枚举类型。
例如:enum {red, blue, green, white};由于枚举类型里的标示符都是常量,因此可以很方便的利用枚举类型声明常量。
C语言——结构体、共用体结构体——struct结构体是具有单一名字的相关元素的集合,而且这些元素可能是不同类型。
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相当于声明的全局变量。