(8)结构体、共用体和枚举类型数据
1. 结构体、共用体的定义及区别,typedef 定义别名
结构体的定义
结构体是一种用户自定义的数据类型,它可以将不同类型的数据组合在一起。例如,定义一个表示学生信息的结构体:
// 定义结构体类型 struct Student
struct Student {char name[20];int age;float score;
};
共用体的定义
共用体也是一种用户自定义的数据类型,但它的所有成员共享同一块内存空间。例如,定义一个简单的共用体:
union Data {int int_value;float float_value;char char_value;
};
结构体与共用体的区别
- 内存分配:
- 结构体的每个成员都有自己独立的内存空间,结构体所占内存大小是所有成员内存大小之和(考虑内存对齐)。例如,上述
struct Student
结构体,name
数组占20字节,age
占4字节,score
占4字节(假设float
占4字节),总共28字节(考虑内存对齐可能会有一些填充)。 - 共用体的所有成员共享同一块内存,其大小等于占用内存最大的成员的大小。对于
union Data
,int
可能占4字节,float
占4字节,char
占1字节,所以union Data
的大小为4字节。
- 结构体的每个成员都有自己独立的内存空间,结构体所占内存大小是所有成员内存大小之和(考虑内存对齐)。例如,上述
- 数据存储和访问:
- 结构体中每个成员都可以独立存储和访问不同的值。例如,可以分别设置
struct Student
结构体中name
、age
和score
的值。 - 共用体在某一时刻只能存储其中一个成员的值,因为它们共享内存。当给一个成员赋值时,可能会覆盖其他成员的值。
- 结构体中每个成员都可以独立存储和访问不同的值。例如,可以分别设置
使用 typedef 定义结构体、共用体别名
- 结构体别名:
typedef struct Student StudentInfo; // 现在 StudentInfo 就可以当作 struct Student 使用StudentInfo student1; // 等同于 struct Student student1;
- 共用体别名:
typedef union Data MyData;MyData data; // 等同于 union Data data;
2. 结构体和共用体数组、指针的定义和初始化,以及参数传递及应用
结构体数组和指针
- 结构体数组定义与初始化:
struct Student students[<