C++结构体和共用体
来源:互联网 发布:unsw moodle 网络 编辑:程序博客网 时间:2024/05/17 09:02
· 结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型。第二,相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。
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;};
- 结构和共用体
- 结构体和共用体
- 共用体和结构体
- 结构体和共用体
- 共用体和结构体
- 结构体和共用体
- C语言_结构体和共用体
- c语言中的结构体和共用体
- c语言的结构体,共用体和枚举
- C语言共用体和与结构体的区别
- C语言结构体和共用体(2)
- C语言学习------3.1 结构体和共用体
- C语言基础之结构体和共用体
- C-结构体与共用体
- C语言结构体与共用体
- C语言结构体与共用体
- C语言结构体 共用体0815
- C语言 结构体与共用体
- Java接口_interface_implements
- c#写出的spfa
- CCF NOI1089 高精度运算
- Day 3 网络流
- Spring和MyBatis环境整合
- C++结构体和共用体
- 学习淘淘商城第四十三课(实现从数据库导入数据到索引库)
- Docker Makefile文件结构
- 日历程序
- hibernate里面的一对多和多对一映射
- 卷积
- tomcat结合nginx实现多个tomcat同时运行,tomcat负载均衡
- c++ 字符串分割函数
- Java中的值传递与引用传递详解