0%

C_杂项

位域结构体

有时候,信息存储的时候,并不需要一个完整的字节,而只需占几个或一个二进制位就能满足需求。例如存放一个bool类型的变量,只需要true或者false即可,这种情况下,只需要0或者1一位二进制位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。

格式:

1
2
3
4
5
6
7
struct _net_pro_cdu  
{
unsigned char acs:4
unsigned char :0
unsigned char ace:4
unsigned char dve:4
} Ncdu;

注意:

  • 无位域名的位域不能使用,仅用来填充、调整尾置(如第四行)
  • 位大小不能超过定义用的类型(如上述例子位数不能超过8)

volatile关键字

声明一个变量是易变的,可以防止编译器对程序一些变量运算的过度优化。

for循环执行顺序

1
2
3
for(int i =0; i<5;i++){
// 循环体
}

执行顺序解抛
执行的顺序如下:
第一步 : i=0 初始化值
第二步 : i<5 进行条件判断,如果为真,则继续执行
第三步 : 执行循环体的内容
第四步 : i++ 变量i自增
第五步 : 回到第二步,条件判断为真,则执行循环体内容,再到i++一直循环,
直到第二步的判断条件为假,则退出该循环

原文链接:https://blog.csdn.net/weixin_44080187/article/details/123429045

union类型

长度问题

实例化为变量后,这个变量的长度是这个union中最长的数据类型的长度

1
2
3
4
5
union DEMO{ 
char status;
int a;
int serial[4];
}demo;//大小为16字节

数据访问

对于union成员,地址相同,存储有点像并列一样的存储(?我是这么理解的),一个成员变化一定会影响其他成员