struct和union的大小问题
struct类型以其中所有size大小之和为其大小
using namespace std;
int main()
{
typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
cout<<"sizeof(struct date)+sizeof(max) = "<<sizeof(too)+sizeof(max)<<endl;
cout<<"sizeof(too) = "<<sizeof(too)<<endl;
cout<<"sizeof(max) = "<<sizeof(max)<<endl;
cout<<"struct data.cow size = "<<sizeof(too.cow)<<endl;
cout<<"union DATE.i size = "<<sizeof(max.i)<<endl;
cout<<"union char.c size = "<<sizeof(max.c)<<endl;
}
sizeof(struct date)+sizeof(max)返回52
using namespace std;
int main()
{
typedef union student
{
char name[10];
long sno;
char sex;
float score [4];
} STU;
STU a[5];
cout<<sizeof(a)<<endl;
return 0;
}
初始化了一个含有5个UNION的数组,由于UNION以其中最大的元素float作为大小 16*5=80
using namespace std;
int main()
{
typedef struct student
{
char name[10];
long sno;
char sex;
float score [4];
} STU;
STU a[5];
cout<<sizeof(a)<<endl;
return 0;
}
输出为180
自然对齐(natural alignment)即默认对齐方式,是指按结构体的成员中(类型)size最大的成员作为基本的分配单元,而且与其顺序有这密切的联系。size最大的是long,size是 4,所以,按照顺序,Char name[10];12个字节;Long sno; 4个字节;Char sex; 4个字节(这里对齐了);Float score [4]; 16个字节。于是(12+4+4+16)×5=180
using namespace std;
int main()
{
typedef struct student
{
char name[10];
char sex;
long sno;
float score [4];
} STU;
STU a[5];
cout<<sizeof(a)<<endl;
return 0;
}
答案是:160. 为什么,只是换了顺序而已呀?关键就在顺序上。
结构体中,size最大的是long,size是 4,所以,按照顺序,Char name[10];12个字节;但是这12中多分配的2个字节可以包含后面的Char sex; (问题就在这);Float score [4]; 16个字节。于是(12+4+16)×5=160
转载于:https://www.cnblogs.com/cobain/archive/2008/01/31/1060271.html
struct和union的大小问题相关推荐
- [C/C++基础知识] 面试再谈struct和union大小问题
最近找工作参加了很多笔试,其中考察结构体和联合体的大小问题是经常出现的一个问题.虽然题目简单而且分值比较低,但是还是想再给大家回顾下这些C和C++的基础知识.希望文章对你有所帮助~ P ...
- 联合体union和大小端(big-endian、little-endian)
1.联合体union的基本特性--和struct的同与不同 union,中文名"联合体.共用体",在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(s ...
- c语言struct_Introduction to CSAPP(十七):复杂数据组织与C语言的 struct与union
如果说数组是同一种类型的数据的连续排列的数据组织形式,那么对于不同类型的数据来说,他们被有机组织起来的方式有两种,分别是struct和union. Struct C语言的 struct 创建一种数据类 ...
- 转 Struct 和 Union区别 以及 对内存对齐方式的说明
转载地址:http://blog.csdn.net/firefly_2002/article/details/7954458 一.Struct 和 Union有下列区别: 1.在存储多个成员信息时,编 ...
- C++ Struct和Union区别
C++ Struct和Union区别 Struct和Union区别 在存储多个成员信息时,编译器会自动给struct每个成员分配存储空间,struct可以存储多个成员信息,而Union每个成员会用同一 ...
- C语言里struct和union的区别
struct和union是C语言的两种数据结构,这两种都是常用的复合结构. 区别: (1) 联合体:所有成员共用一块地址空间,也就是说联合体只放了一个被选中的成员: 结构体:所有的成员的内存占用是累加 ...
- 数据类型:Struct 和 Union区别
参考:Struct 和 Union区别_firefly_2002的专栏-CSDN博客_union和struct的区别 Struct 和 Union有下列区别: 1.在存储多个成员信息时,编译器会自动给 ...
- C++报错解决:error: ‘int’ is not a class, struct, or union type typedef typename _Sequence::value_
我在使用C++的时候,遇到了如下报错: -> % g++ test.cpp In file included from /usr/include/c++/7/queue:64:0,from te ...
- struct and union
[url]http://hi.baidu.com/tweigh/blog/item/5303d2ef6e2720eace1b3e9d.html[/url] 1. struct的巨大作用 面对一个人的大 ...
最新文章
- 神经网络可解释性的另一种方法:积分梯度,解决梯度饱和缺陷
- 互联网IP路由的逐跳全局最优化原则-Dijkstra算法证明
- [转]编程语言中的 鸭子模型(duck typing)
- linux svn apt get,Ubuntu下安装SVN客户端
- SAP ABAP Netweaver Note download debug
- Github排序(转载)
- 业务分析岗所需具备的技能_成功的业务分析师需要具备的3种技能
- C#.Net工作笔记017---C#事件的理解以及自定义事件的方法
- 以太坊2.0合约余额新增13536 ETH
- 为什么会自动打开Nautilus文件管理器?
- 多态与虚函数(C++)
- sqlserver with 语法
- 大数据实战第十六课(上)-Spark-Core04
- 爬虫demo——爬取电影天堂的资源,存储到本地json文件
- 积极主动沟通说话交流的重要性和案例以及技巧
- java jxl导出excel小结
- 数据结构实验6图的应用-行车路线问题
- 张五常先生谈读书和思考的方法
- Tessellation on Any Budget
- MATLAB小提琴仿真(数学物理方程)大作业人工智能
热门文章
- php pdo 时间,php – 使用PDO执行时间记录查询 – 自动完成功能无效
- abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...
- MATLAB可以打开gms文件吗,GMS文件扩展名 - 什么是.gms以及如何打开? - ReviverSoft...
- 查看本地oracle密码,Oracle 本地验证和密码文件
- java api 框架_java常用对象API之集合框架
- DASH流媒体MPD文件解析
- Python中的标准数据类型
- 解决Mask RCNN自己航拍数据集训练的问题
- Python Qt GUI设计:QMainWindow、QWidget和QDialog窗口类(基础篇—10)
- 深度学习--TensorFlow (2)单层感知器2 -- 实现多数据分类