结构体,枚举,联合

目录

1.结构体

1.1结构体的基础知识

1.2 结构的声明

1.3:结构体的声明

1.4:结构的自引用

 1.5 结构体变量的初始化

1.6:结构体的内存对齐

1.7:offsetof函数

1.7.1:offsetof函数的用例

2.位段

2.1:位端的定义

3.枚举

3.1:枚举类型的定义

3.2:枚举的优点

4.联合

4.1:联合的定义

4.2:联合的特点

4.3:联合大小的计算


1.结构体

1.1结构体的基础知识

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

1.2 结构的声明

一般形式:

               struct   结构体名

                         {成员变量};

接下来,我们创建一个学生的结构体

记得要有分号。

1.3:结构体的声明

struct student
{
    char name[10];//名字
    char sex[5];//性别
    int age;//年龄
    int number//学号
}p1,p2;//声明p1,p2 学生-----第一种方法声明
int main()
{
    struct student s1;//第二种方法声明,
}

1.4:结构的自引用

 1.5 结构体变量的初始化

struct student
{
	char name[15];//名字
	char sex[10];//姓名
	int age;//年龄
	char add[20];//地址
}s1 = { "zhangsan","nan",20,"xian" };//第一种方法初始化
int main()
{
	struct student s1 = { "wangming","nu",18,"henan" };//第二种方法初始化
}

1.6:结构体的内存对齐

这是一个热门考点:结构体内存对齐:

如何计算?

首先得掌握结构体的对齐规则:

1,第一个成员在与结构体变量偏移量为0的地址处。

2,其他成员要对齐到莫个数字对齐数编译器默认的一个对齐数与该成员大小的较小值的整数倍的地址处。

3,结构体总大小为最大对齐数的整数倍。

既然知道规则了,那我们来试一试一道题,看看自己算对了没。

 这道题你们算对了吗?这道题可以检测出来,自己算对了吗,那就是offsetof 函数。

1.7:offsetof函数

offsetof这个函数的头文件#include<stddf.h>

(type,member)这个是结构体的成员属性。

1.7.1:offsetof函数的用例

struct s3
{
	double d;
	char c;
	int i;
};
int main()
{
	printf("%d\n", sizeof(struct s3));
	printf("%d\n", (int)offsetof(struct s3,d));
	printf("%d\n", (int)offsetof(struct s3, c));
	printf("%d\n", (int)offsetof(struct s3, i));

	return 0;
}

2.位段

2.1:位端的定义

注意:

1.位端成员必须是int ,unsigned, int 或signed int.

2.位端的成员名后边有一个冒号和一个数字。

2.2:位端的用例

位端的空间上是按照需要以4个字节(int)或者1个字节(char)的方式来开辟。 

位端是不跨平台的。


3.枚举

3.1:枚举类型的定义

从这里看:默认从零开始,依次递增1, 

3.2:枚举的优点

1.增加代码的可读性和可维护性

2.防止命名污染。

3.使用方便,一次可以定义多个变量。

4.便于调试。


4.联合

4.1:联合的定义

这些成员公用同一块空间

4.2:联合的特点

联合的成员是共用同一块内存空间,这样一个联合变量的大小,至少是最大成员的大小。

4.3:联合大小的计算

1.联合大小至少是最大成员的大小。

2.当最大成员的大小不是最大对齐数的倍数的时候,就要对齐到最大对齐数的整数倍。

 

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
C语言中,结构体是一种自定义数据类型,可以将不同类型的变量组合在一起,形成一个新的数据类型。结构体定义的基本形式如下: ```c struct 结构体名 { 数据类型 成员名1; 数据类型 成员名2; // ... }; ``` 其中,结构体名是用户自定义的名称,成员名是结构体中每个成员的名称,数据类型可以是任意C语言的数据类型,包括基本数据类型和自定义数据类型。 结构体变量的定义方式如下: ```c struct 结构体名 变量名; ``` 读取结构体中的成员变量可以通过“.”运算符来实现,例如: ```c #include <stdio.h> struct Person { char name[20]; int age; }; int main() { struct Person p; printf("请输入姓名:"); scanf("%s", p.name); printf("请输入年龄:"); scanf("%d", &p.age); printf("姓名:%s,年龄:%d\n", p.name, p.age); return 0; } ``` 枚举是一种特殊的数据类型,用于定义一组常量。枚举的定义方式如下: ```c enum 枚举名 { 常量名1, 常量名2, // ... }; ``` 其中,枚举名是用户自定义的名称,常量名是枚举中每个常量的名称。枚举常量的值默认是从0开始自动递增的,也可以手动指定值。例如: ```c #include <stdio.h> enum Weekday { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; int main() { enum Weekday today = Tuesday; printf("今天是星期%d\n", today + 1); return 0; } ``` 联合是一种特殊的数据类型,它的成员变量共享同一块内存空间。联合的定义方式如下: ```c union 联合名 { 数据类型 成员名1; 数据类型 成员名2; // ... }; ``` 其中,联合名是用户自定义的名称,成员名是联合中每个成员的名称,数据类型可以是任意C语言的数据类型,但所有成员的大小不能超过联合的大小。例如: ```c #include <stdio.h> union Number { int i; float f; }; int main() { union Number n; n.i = 123; printf("int: %d, float: %.2f\n", n.i, n.f); n.f = 3.14; printf("int: %d, float: %.2f\n", n.i, n.f); return 0; } ``` 以上就是C语言中自定义数据类型中的结构体枚举联合的基本用法和注意事项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值