走进结构体存储--位域
1、位域简介 在嵌入式编程中,经常会遇到下面的结构:
& d a t a 为d a t a 位域结构的起始地址,将其强制转换为i n t 型指针,并赋值给p ,所以p 的
值就是d a t a 位域的起始地址,即4 2 3 3 6 2 4 ,p 指针指向的就是以4 2 3 3 6 2 4 为起始地址的连续
4 个字节的内存单元;接下来执行“c h a r * p 1 = ( c h a r * ) ( p + 1 ) ; ”使p 1 的值为4 2 3 3 6 2 8 ,p 1 就指
向地址为4 2 3 3 6 2 8 的内存单元;执行“p 2 = p 1 + 1 ; ”使p 2 的值为4 2 3 3 6 2 9 ,c h a r 型指针指向
地址为4 2 3 3 6 2 9 的内存单元。我们发现,* p 的值和位域a 的值相同。由此可以看出,V C + +
6 . 0 在编译的时候,对于那些没有使用的位域段,编译器对其进行填充0 的处理。看看位域c
的运行结果,我们发现输出与输入不相符,这是因为在编译的过程中对c h a r 型位域默认执行
有符号处理,所以输出值为- 1 ,而对位域b 指定了无符号的处理方式,所以输出与输入完
全一致。