结构体--其三--结构体的位段

本文解释了C语言中位段的概念,包括其内存分配原理,如何通过位段节省空间,以及在处理网络协议和使用注意事项,特别强调了跨平台问题和不能直接使用&操作符的情况。
摘要由CSDN通过智能技术生成

什么是结构体的位段呢:

我们都知道在C语言的内置类型有很多--整形,浮点型等等,而每一个类型都占用指定的内存空间,当我们储存一个char类型时时一个字节也就是八个bit位,但是有时候我们存入数据不需要那么大的空间于是就有了位段的概念,可以具体到bit的开辟空间,提高空间的利用率。

语法格式如下:

位段的成员后面加一个冒号后跟一个数字

位段的内存分配:

通常来说位段的内存分配是按照内置类型来分配的。

举个例子:

我们都知道一个char类型是一个字节--也就是八个bit位,但是如上图一个char:3只有三个bit位,

也就是说开辟三个bit的空间,第二个char b:4--4个bit的空间,紧接着第一个的继续开辟,现在一共占了7个bit位,当我们要开辟点三个的时候,这时候的第一个char类型的八个bit只剩下了一个bit位,不满足5个,于是计算机就会从新开辟一个char的八个bit 来存储第三个--C  --占用了5个bit剩下的不满足存储d的空间,于是就开辟一个新的空间一次类推。

位段的跨平台问题:

但是也有专门用到其独特的地方如下:

上图是⽹络协议中,IP数据报的格式,我们可以看到其中很多的属性只需要⼏个bit位就能描述,这⾥ 使⽤位段,能够实现想要的效果,也节省了空间,这样⽹络传输的数据报⼤⼩也会较⼩⼀些,对⽹络 的畅通是有帮助的。

位段使用的注意事项:

位段的⼏个成员共有同⼀个字节,这样有些成员的起始位置并不是某个字节的起始位置,那么这些位 置处是没有地址的。内存中每个字节分配⼀个地址,⼀个字节内部的bit位是没有地址的。 所以不能对位段的成员使⽤&操作符,这样就不能使⽤scanf直接给位段的成员输⼊值,只能是先输⼊ 放在⼀个变量中,然后赋值给位段的成员。

如下:


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值