C++结构体和共用体

· 结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型。第二,相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。

const int MAX_CHAR=128;
struct Student
{
    char name[MAX_CHAR];
    char sex[MAX_CHAR];
    unsigned int age;
    char addr[MAX_CHAR];
};

Student stdnt;
stdnt age;

在定义结构体变量时,编译器会为变量分配足够的空间以容纳结构体的所有成员。如果定义下面一个结构体变量,编译器将为其分配多大的空间呢?

struct ByteAlign
{
    double menOne;
    char   menTwo;
    int    memThree;
};

在定义结构体ByteAlign的变量时,应分配13个字节。但实际使用sizeof函数测试时,发现结构体ByteAlign的变量占用16个字节,主要结构体的字节对齐问题造成的。

.在开发应用程序时,有时需要在一个字节中表示多项内容。例如,在描述IP协议时,其首部长度占4位,版本号占4位。C/C++语言提供了位域,允许用户单独访问一位数据。在定义位域时,也可以不指定成员名称,这样可以预留一些空间。

typedef struct HeadIP
{
    unsigned char headerlen:4;  //首部长度,占4位
    unsigned char version:4;    //版本,占4位
};

struct FieldZone
{
    unsigned char:4;
    unsigned char memTwor:2;
    unsigned char memThree:1;
};
//用户在访问memTwo成员时,将直接从一个字节的第5位开始读取数据。

. 共用体类型也是用来描述类型不实相同的数据,但与结构体类型不同,共用体数据成员存储时采用覆盖技术,共享(部分)存储空间。即每一个成员共享同一个内存空间。union的大小由最大的成员的大小决定union成员共享同一块大小的内存,一次只能使用其中的一个成员。对某一个成员赋值,会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节。共用体union的存放顺序是所有成员都从低地址开始存放的。

union TypeSet
{
    double dbRate;
    char szFlag;
    int nCount;
};

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值