IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 位段、枚举和联合体 -> 正文阅读

[C++知识库]位段、枚举和联合体

目录

位段

?位段的使用

枚举

?联合体也叫共用体


位段

什么是位段:

1.位段的声明必须是int、unsigned int 或signed int。(事实上也有char)

2.位段的成员后面有一个冒号和一个数字。

先来一段代码说明问题

struct A
{
	int a:2;
	int b:5;
	int c:10;
	int d:30;
};
int main()
{
	struct A s;
	printf("%d\n",sizeof(s));
	return 0;
}

?A就是一个位段类型,位段也是结构体的一种类型。

那么A的大小是多少呢?

结果发现是8个字节。

位段:位指的是二进制位。所以我们要明白变量后面的数字是什么意思,2代表2个比特位,5代表5个比特位。

我们来了解一下位段的内存分配。

1.位段的成员可以是int ,unsigned int,signed int 或 char类型。

2.位段在空间上是按照需要,以四个字节(int)或一个字节(char)的方式来开辟的。

3.位段涉及很多不确定因素,位段是不跨平台的,注重可以直接的程序避免使用位段。

?

?另外同学们注意,不能开辟大于32个比特位,同时位段可移植性差,不能随便跨平台移植。

位段的出现其实也有好处,他可以节省空间。

?位段的使用

struct S
{
	char a : 3;
	char b : 4;
	char c : 5;
	char d : 4;
};
int main()
{
	struct S s = {0};

	s.a = 10;
	s.b = 20;
	s.c = 3;
	s.d = 4;
	printf("%x\n",s);
	return 0;
}

?

?位段是不跨平台的,C语言没有规定我们是从左使用空间还是从右使用空间,所以位段不夸平台。

枚举

枚举顾名思义就是-------列举

//枚举类型
enum sex
{
	//枚举可能取值
	male,
	female,
	secret
};
int main()
{
	enum sex s = male;	
	return 0;
}

? ? ? ?枚举的使用方法如上面的代码。先写出枚举类型 enum sex?然后在枚举类型下面的括号内列出枚举的可能取值。最后一定要用“;”结尾。

enum color
{
	//枚举的可能取值-常量
	red ,
	yellow ,
	blue 
};
//#define red 0
//#define yellow 1
//#define blue 2
int main()
{
	enum color col = red;
	//int color = red;
	printf("%d%d%d",red,yellow,blue);
	return 0;
}

枚举开始已经给每一个可能的取值赋好了值。比如我们看上面这段代码.

我们输出的枚举的可能变量是012,说明已经给枚举可能取值赋值了。

我们也可以直接给red,yellow,blue赋值,也可以像我主函数中第一行代码一样取值。我们只能那括号里面的可能取值赋值。枚举可能取值也叫枚举常量。

?枚举的优点:

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

2.和#define定义标识符相比较枚举有类型检查更谨慎。

3.房子命名污染(封装)

4.便于调试。

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

?联合体也叫共用体

联合体的使用方法和结构体类似。

union un
{
	int a;//4 8 ---4
	char arr[5];//5 1 8 ---1
};
int main()
{
	union un u;
	printf("%d",sizeof(u));
	return 0;
}

想知道联合体的大小我们就必须搞清楚联合体是怎么在内存中存储的。

?

我们知道? ?a占4个字节? ?arr是5个字节。这时候 a是四个字节,默认对齐数是8? 最小就是4.

同理arr的对齐数是1,最大对齐数的整数倍也就是四的倍数就是8.所以这个联合体的大小就是8.

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

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

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:14:26  更:2022-03-12 17:15:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:36:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码