【C语言】【结构体的位段】位段的内存分配及注意事项

1.什么是位段:

c 复制代码
struct A
{
int _a:2;
int _b:5;
int _c:10;
int _d:30;
};

1.A就是一个位段类型的变量,位表示比特位,意思是 A中的变量申请内存的比特位数

比如 _a要占 2 个bit

2.位段的成员必须是 int ,unsigned int ,signed int 类型的,在C99中段位成员可以有 char类型的。

2.段位中的内存分配:

c 复制代码
#include<stdio.h>
struct A
{
	int _a : 2;
	int _b : 5;
	int _c : 10;
	int _d : 30;
};
int main()
{
	printf("%d", sizeof(struct A));
}

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

而且是先把十进制转化为二进制,再根据申请的bit数从低位截断后进行存储的,当开辟的8个bit位剩余空间不够存下一个时,再开辟下一个内存空间(8bit)

3.位段使用注意事项:

内存中,每个字节分配一份空间,而位段中的成员可能并不是每个都独自占 1 个字节的空间,所以直接取某个成员的地址是没有意义的,一个字节内部的bit 位是没有地址的

错误写法:

正确写法:

c 复制代码
#include<stdio.h>
struct A
{
	int _a : 2;
	int _b : 5;
	int _c : 10;
	int _d : 30;
};
int main()
{
	struct A a = { 0 };
	int b = 0;
	scanf("%d", &b);
	a._b = b;
	return 0;
}
相关推荐
不是光头 强1 分钟前
Java 后端实战进阶:从踩坑到架构的系统化笔记
java·笔记·架构
叶~小兮6 分钟前
ELK技术栈全套学习笔记(Elasticsearch+Logstash+Filebeat)
笔记·学习·elk
HMS工业网络8 分钟前
STP、RSTP到N-Ring的演进之路
服务器·开发语言·php
Plan-C-19 分钟前
二叉树的遍历
java·数据结构·算法
历程里程碑23 分钟前
54 深入解析poll多路复用技术
java·linux·服务器·开发语言·前端·数据结构·c++
婷婷_17239 分钟前
【PCIe 验证每日学习・Day36】PCIe 存储器寻址空间与 BAR 底层原理
网络·学习·程序人生·芯片·pcie
.千余1 小时前
【Linux 】网络基础1
linux·运维·服务器·开发语言·网络·学习
小短腿的代码世界1 小时前
Qt低级网络编程与零拷贝技术在高频交易中的应用:从QTcpSocket到共享内存的全链路优化
开发语言·网络·qt
一切皆是因缘际会1 小时前
AI Agent落地困局与突破:从技术架构到企业解析
数据结构·人工智能·算法·架构
つ安静与叛逆的小籹人1 小时前
小红书笔记详情API实战总结(技术复盘)
笔记