打印

这段代码实在不明白

[复制链接]
1886|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
彪哥|  楼主 | 2007-11-5 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
union                                         //中断寄存器
{
 uint8 Register[2];
 struct 
  {
   uint8 control_out_port  :1;
   uint8 control_in_port   :1;
   uint8 port_out_1        :1;
   uint8 port_in_1         :1;
   uint8 main_out_port     :1;
   uint8 main_in_port      :1;
   uint8 bus_reset         :1;
   uint8 suspend_change    :1;
   uint8 DMA_EOT           :1;
   uint8 not_use           :7;
  }Interrupt;
}Interrupt_Register;

为什么数组赋值后,就把数组中的每一位分配给结构中的每个变量了?没见过这种格式,是固定的吗?
     比如 我让 Interrupt_Register.Register[0]=0xff
     这时候 Interrupt_Register.Interrupt.control_out_port=1;
            Interrupt_Register.Interrupt.control_in_port=1; 
            Interrupt_Register.Interrupt.port_out_1=1;
            Interrupt_Register.Interrupt.port_in_1=1;
            Interrupt_Register.Interrupt.main_out_port=1;     
            Interrupt_Register.Interrupt.main_in_port=1; 
            Interrupt_Register.Interrupt.bus_reset=1;         
            Interrupt_Register.Interrupt.suspend_change=1            
这些变量就都等于数组中的每一位了,是怎么传递过去的?还是是一种固定的赋值方式?


相关帖子

沙发
aolin| | 2007-11-5 12:51 | 只看该作者

重修C语言!

使用特权

评论回复
板凳
ayb_ice| | 2007-11-5 13:34 | 只看该作者

C

使用特权

评论回复
地板
彪哥|  楼主 | 2007-11-5 14:15 | 只看该作者

多谢高手指点

重修中.....

使用特权

评论回复
5
不务正业| | 2007-11-5 14:16 | 只看该作者

重修C语言

union这个我倒是知道怎么回事, 只是, 这个结构中的“uint8 control_out_port  :1;”这种格式是标准C语言中的么? 只占一位(bit)?

使用特权

评论回复
6
wnch| | 2007-11-5 14:39 | 只看该作者

回去看看C语言位域部分就明白了

使用特权

评论回复
7
彪哥|  楼主 | 2007-11-5 14:51 | 只看该作者

回5楼

你说的没错,是只占一位。我翻了3本C语言的书,都是在介绍结构和共用体,这种形式的嵌套没有单独列出来,还望高手指点迷津。

使用特权

评论回复
8
wnch| | 2007-11-5 16:22 | 只看该作者

有的C语言书也把这个叫做位段

就是可以以位为单位分配内存,不一定是1位,也可以分配为2位3位等等。
而共用体里面有两种变量,这两种变量共占同一内存空间地址,所以给数组赋值,也就等于给位段赋值。

使用特权

评论回复
9
彪哥|  楼主 | 2007-11-5 17:44 | 只看该作者

多谢多谢

最后这一句话捅破了这张纸,俺终于明白了!谢谢大家!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

171

帖子

1

粉丝