免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4196 | 回复: 6
打印 上一主题 下一主题

[C] 共用体和结构体混用的一个例子 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-28 16:24 |只看该作者 |倒序浏览
#define PB(X) printf((X)?"1":"0")
#define UI unsigned int
struct byte
{
  UI a0:1;
  UI a1:1;
  UI a2:1;
  UI a3:1;
  UI a4:1;
  UI a5:1;
  UI a6;
  UI a7;
};
union bits{char ch;struct byte bit;};
void decode(union bits c);
void main()
{
  char c;
  union bits asc;
  for(c='A';c<'C';c++)
  {
    asc.ch=c;
    printf("%o:",c);
    decode(asc);
  }
}
void decode(union bits b)
{
  PB(b.bit.a7);
  PB(b.bit.a6);
  PB(b.bit.a5);
  PB(b.bit.a4);
  PB(b.bit.a3);
  PB(b.bit.a2);
  PB(b.bit.a1);
  PB(b.bit.a0);
  printf("\n");
}



答案:101:11000001
        102:11000010

论坛徽章:
0
2 [报告]
发表于 2007-12-28 16:35 |只看该作者
理解不了为什么a6,a7不为空。
我测试的情况:
1,声明共用体变量后,不初始化,a6,a7的值和程序中一样;
2,把那个结构体单拉出来,声明一个变量,不初始化,成员值全为空;
3,一放进共用体里,不初始化也有值,而且是固定的;
自己的结论:和ch赋值没关系,是系统分配的默认值。
问题:为什么默认会有值,有什么规律?

论坛徽章:
0
3 [报告]
发表于 2007-12-28 16:49 |只看该作者
原帖由 liefengzi 于 2007-12-28 16:24 发表
#define PB(X) printf((X)?"1":"0")
#define UI unsigned int
struct byte
{
  UI a0:1;
  UI a1:1;
  UI a2:1;
  UI a3:1;
  UI a4:1;
  UI a5:1;
  UI a6;
  UI a7;
};
union bits{char ch;stru ...

那是因为你的asc是在栈上,其内容随机。
你改成 union bits asc = {0}即可。或把它定义成全局变量

论坛徽章:
0
4 [报告]
发表于 2007-12-28 16:57 |只看该作者
小弟菜鸟,还请大侠说得详细点,谢谢。

论坛徽章:
0
5 [报告]
发表于 2007-12-29 09:35 |只看该作者
好像不是随机的,每回执行都一样。

论坛徽章:
0
6 [报告]
发表于 2007-12-29 10:36 |只看该作者
那是因为你连续进行的测试,期间也没有做其它事情,加上一点运气。

论坛徽章:
0
7 [报告]
发表于 2007-12-29 15:11 |只看该作者
可我隔天运行了好几次,还不变呀;
asc.bit.a7为034400
asc.bit.a6为040000
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP