Code Bye

联合体嵌套结构体的问题

#include <stdio.h>
typedef union
{
unsigned int u;
struct
{
unsigned char a :1;
unsigned char b :1;
unsigned char c  :6;
unsigned char d  :1;
} ST;
}UN;
int main()
{
UN.ST.u = 0;
UN.ST.a = 1;
UN.ST.b = 2;
UN.ST.c = 3;
UN.ST.d = 4;
printf(“%d\n”, UN.u);
return 0;
}
代码大致就这样的,本人没运行,本人主要想知道值传递的过程,有没有高手给讲解下的。
解决方案

10

你的代码有点问题,本人给你调试了一下,应该改成如下代码才能运行,具体解释见下一楼
#include <stdio.h> 
typedef union
{
	unsigned int u;
	struct
	{
		unsigned char a :1;
		unsigned char b :1;
		unsigned char c :6;
		unsigned char d :1;        
	} ST;
}UN;
int main()  
{
	UN un;
	un.u = 0;  
	un.ST.a = 1;   
	un.ST.b = 2;  
	un.ST.c = 3;  
	un.ST.d = 4;  
	printf("%d\n", un.u);  
	return 0;  
} 

运行结果是13

10

1. 结构中的u和ST是共用一段内存,所以你修改了u,则ST的内容自动变化,同样假如你修改了ST的内容,则u的内容也自动变化.这就是联合体
2. unsigned char a :1;这种定义方式,是按位进行定义的,即a只占用一个位,同样b和d都只占用一位,所以假如这三个变量你赋值大于1的话,则自动被截断为1位,即除了低1位有效之外,其它高位的全部被丢弃。按位定义的,和这个变量的类型相关性不是很大,所以不是说a被定义成char就是8位。
3. 由于是联合体,所以你的main()中对u赋值之后,再对a\b\c\d赋值,结果u就被修改掉了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明联合体嵌套结构体的问题