原创 共用体、枚举类型的理解与应用

2014-12-4 00:05 749 5 5 分类: MCU/ 嵌入式

------------------------------------------------------联合体-----------------------------------------------------

E.g

   union  my_union {

       char A;    ---> 1

       int B;     ---> 4

       double C;  ---> 8

  };               ---> total : 8字节

  共用相同的存储空间,大小由存储空间最大的变量决定

E.g

    union my_union my_2;


    my_2.A = 'A';

    my_2.B = 150;

    my_2.C = 1111.22222;

 

//查看联合体成员地址  ----->  存贮在相同地址单元上

(gdb) p &my_2.A

$5 = 0xbffff338 "A\204\004\b\364O\374\267\300\204\004\b\364", <incomplete sequence \374\267>

(gdb) p &my_2.B

$6 = (int *) 0xbffff338

(gdb) p &my_2.C

$7 = (double *) 0xbffff338

 

我们再从内存地址中存储的数值来看:

·执行 my_2.A = 'A' 后的内存变化 --->  0xbffff338:   0x08048441  ---> 最低字节数值  0x41  ---> 65 --> 'A'

(gdb) x/8x 0xbffff338

0xbffff338:     0x08048441    0xb7fc4ff4     0x080484c0    0xb7fc4ff4

0xbffff348:     0x00000000    0xb7e384d3    0x00000001    0xbffff3e4

 

//执行 my_2.B = 150   后的内存变化  --->  0xbffff338:    0x00000096  ---> 数值 0x96 --> 150

(gdb) n

58        my_2.C = 1111.22222;

(gdb) x/8x 0xbffff338

0xbffff338:     0x00000096    0xb7fc4ff4     0x080484c0    0xb7fc4ff4

0xbffff348:     0x00000000    0xb7e384d3    0x00000001    0xbffff3e4

 

//执行 my_2.C = 1111.22222  后的内存变化

(gdb) n

60           return 0;

(gdb) x/8x 0xbffff338

0xbffff338:     0x8da3c212    0x40915ce3    0x080484c0    0xb7fc4ff4

0xbffff348:     0x00000000    0xb7e384d3    0x00000001    0xbffff3e4

----------------------------------------------枚举类型------------------------------------------------------------

  ·枚举类型: 对常用数值的一个陈列,标识符任意,(任意时刻只能枚举一个值)占用4个字节

 

  enum my_enum { OK,OOK,OOOK };    ---->  默认从起始为0开始,给第一个元素赋值

                                   ---->  OK  = 0 ,

                                          OOK = 1,

                                          OOOK = 2,

 

  enum my_enum { OK=8,OOK,OOOK,OOOOK };    ---->  默认从起始为8开始,给第一个元素赋值

                                    ---->   OK  = 8 ,

                                            OOK = 9,

                                            OOOK = 10,

 

  enum my_enum { OK=8,OOK,OOOK=0,OOOOK };    ---->  默认从起始为8开始,给第一个元素赋值,遇到重新赋值时,重新开始往后赋值

                                   ---->  OK  = 8 ,

                                         OOK = 9,

                                         OOOK = 0,

                                         OOOOK = 1,

★枚举类型的使用的好处:使程序更直观,更人性化,更易懂
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条