一、结构体
结构体是一种用户自定义的数据类型,用于组合不同类型的数据成员
1.定义结构体
struct<结构体名称>
{
<数据类型1><成员名称1>;
<数据类型2><成员名称2>;
......//更多成员声明
};
struct Person
{
char name[20];
int age;
float height;
};
2.创建结构体变量
定义结构体后,可以通过该结构体创建一个变量
struct Person person1;
3.访问结构体成员
使用成员访问符 "." 来访问结构体中的成员
strcpy (person1.name,"zs");
person1.age=15;
person1.height=185.6;
4.结构体作为函数参数
结构体可以作为函数参数传递,使得函数能够操作和修改整个结构体
void printPerson(struct Person p)
{
printf("Name:%s,Age:%d,Height:%lf")
}
5.结构体指针
使用指向结构体的指针可以更灵活地操作和传递结构体
struct Person*p;
p=&person1;
printf("Name:%s\n",p->name);
6.嵌套结构体
结构体可以包含其他结构体作为其成员
struct Address
{
char city[20];
char street[20];
};
struct Strudent
{
char name[20];
int id;
struct Adress adress;
};
7.结构体数组
结构体数组是由相同类型的结构体元素组成的数组
struct Person people[10];
strcpy (people[0].name,"lisi");
people[0].age=18;
二、联合体
联合体(union)是一种特殊的数据类型,它允许在同一个内存位置存储不同的数据类型。联合体可以包含多个成员,联合体中的所有成员共享同一块内存。如果联合体中有一个成员被赋值,其他成员的值将被覆盖
union MyUnion {
int a;
float b;
char c;
};
三、枚举类型
枚举类型用于定义一组命名的常量,可以提高代码的可读性。这些常量通常代表某种特定的状态、选项或值。
enum Weekday {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};
enum Weekday today = Friday;
四、位段
精确地控制每个字段占用的位数。通常情况下,位段用于节省内存空间, 帮助优化内存使用,并且可以提高代码的可读性和可维护性。
struct {
unsigned int Male : 1; // 占用1位,用于表示性别
unsigned int age : 7; // 占用7位,用于表示年龄
} person;