C语言集合(自定义类型:结构体、位段、枚举、联合体)

一、结构体

结构体相关知识请参考:结构体

二、位段

(一)位段的定义

  1. 位段很像结构体,但是它成员只支持int unsigned int signed int类型,C99标准以后也支持char类型;
  2. 位段的成员名后面有一个冒号和数字(所占二进制位的个数)
struct A
{
    int _a:2;
    int _b:5;
    int _c:10;
};
typedef struct S
{
	char a : 3;
	char b : 4;
	char c : 5;
	char d : 4;
}S;

int main()
{
	S s = { 0 };
	s.a = 10;
	s.b = 12;
	s.c = 3;
	s.d = 4;
	return 0;
}
  1. a和b两个占一个字节,10的二进制是1010,取三位是010,放到一个字节的末尾,12的二进制是1100,放到这个字节里,所以这一个字节是01100010,写成16进制就是0X62。
  2. c占一个字节,放得下3;
  3. d占一个字节,放得下4
    在这里插入图片描述

(二)位段的应用

使用位段主要是为了节省空间,不像结构体,要很多对齐,适用于要节省空间的应用中。

三、枚举

(一)枚举的定义

  1. 枚举是种类型,注意枚举里的枚举常量都要大写,并且使用,
enum Colour
{
	GREEN = 1,
	BLACK,
	RED,
};
  1. 枚举常量可以赋予初值,没有初值默认从0 开始,一次递增1;有初值,从初值开始依次递增1。

(二)枚举的优点

  1. 增加代码的可读性和可维护性;
  2. #define有类型检查;
  3. 防止命名污染,有封装;
  4. 便于调试
  5. 使用方便,一次定义多个常量。

四、联合体

联合体和结构体一样,不过这些成员共用一块空间

(一)联合体大小判断

  1. 联合体大小至少是最大成员的大小;
  2. 当最大成员大小不是最大对齐数的整数倍时,要对齐到最大对齐数的整数倍。

(二)联合体内存

可以看出,共用同一块内存的成员,地址相同,遵循小段规则,对数据进行修改。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值