C++结构中的位字段和共用体

来源:互联网 发布:哪个直播软件好 编辑:程序博客网 时间:2024/05/21 11:28

C++结构中的位字段:

与c语言一样,C++也允许指定占用特定位数的结构成员。这使得创建与某个硬件设备上的寄存器对应的数据结构非常方便。字段的类型应为整型或者枚举,接下来是冒号,冒号后面是一个数字,代表使用的位数。可以使用没有名称的字段来提供间距。每个成员都被称为位字段。
    struct test    {        int sn:4;        unsigned int :4;        bool flag:1;        bool flag1:1;    };    test p={1,true,false};

可以像通常那样初始化,还可以使用标准的结构表示法来访问位字段。
位字段通常用在低级编程中。

共用体:

共用体是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中一种数据类型,它里面的成员共享一块地址空间。简单来说,结构可以同时存储int,long和double,而共用体只能存储int或者long或者double。共用体的长度为其最大成员的长度。共用体的声明和结构很类似:
    union test    {        int p1;        double p2;        long p3;    };
共用体的用途之一是,当数据项使用两种或多种格式,但不会同时使用时,可节省空间。
当共用体本身又是一个结构体的成员时,可以省略名称,即匿名共用体:
    struct Student    {        char name[20];        int sex;  //0代表男性,1代表女性        union         {            int female_id;  //假设男学生id比女学生id长            long male_id;        };    }t;    t.sex=1;    t.male_id=1;    if(t.sex==0) printf("%ld\n",t.male_id);    else printf("%d\n",t.female_id);
尽管现在系统的内存很大,好像没有节省那么一点空间。但C++还用于嵌入式系统编程,对这些应用程序来说,内存非常宝贵,则节省内存显得很有必要。另外,共用体常用于操作系统数据结构或硬件数据结构。