1.应用:
一般用于单片机或是是芯片操作,减少其内存的使用。
2.上代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct{
char GPIO1:2;
char GPIO2:2;
char GPIO3:2;
char GPIO4:2;
}GPIO;
int main()
{
GPIO test;
test.GPIO1 = 1;
test.GPIO2 = 0;
test.GPIO3 = 0;
test.GPIO4 = 1;
printf("整个结构体的字节: %d\n",sizeof(test));
printf("test.GPIO1 :%d\n",test.GPIO1);
printf("test.GPIO2 :%d\n",test.GPIO2);
printf("test.GPIO3 :%d\n",test.GPIO3);
printf("test.GPIO4 :%d\n",test.GPIO4);
printf("test.GPIO1 :%d\n",&test);
}
3.运行结果:
4.分析:
(1)该结构体使用了1个字节的内存;如果不使用位域的话,该 结构体应该是使用了4个字节的内存。所以位域可以减少结构体的内存使用,在你变量存储的数据不是很大的情况下。
(2)要注意的是,其不能取到每个变量的地址,因为地址不对其。取地址的单位至少是一个字节的,所以在该例子中,只能取到该结构体的地址