union类型以其中size最大的为其大小
struct类型以其中所有size大小之和为其大小

#include<iostream>
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

#include<iostream>
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

#include<iostream>
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

#include<iostream>
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的大小问题相关推荐

  1. [C/C++基础知识] 面试再谈struct和union大小问题

    最近找工作参加了很多笔试,其中考察结构体和联合体的大小问题是经常出现的一个问题.虽然题目简单而且分值比较低,但是还是想再给大家回顾下这些C和C++的基础知识.希望文章对你有所帮助~         P ...

  2. 联合体union和大小端(big-endian、little-endian)

    1.联合体union的基本特性--和struct的同与不同 union,中文名"联合体.共用体",在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(s ...

  3. c语言struct_Introduction to CSAPP(十七):复杂数据组织与C语言的 struct与union

    如果说数组是同一种类型的数据的连续排列的数据组织形式,那么对于不同类型的数据来说,他们被有机组织起来的方式有两种,分别是struct和union. Struct C语言的 struct 创建一种数据类 ...

  4. 转 Struct 和 Union区别 以及 对内存对齐方式的说明

    转载地址:http://blog.csdn.net/firefly_2002/article/details/7954458 一.Struct 和 Union有下列区别: 1.在存储多个成员信息时,编 ...

  5. C++ Struct和Union区别

    C++ Struct和Union区别 Struct和Union区别 在存储多个成员信息时,编译器会自动给struct每个成员分配存储空间,struct可以存储多个成员信息,而Union每个成员会用同一 ...

  6. C语言里struct和union的区别

    struct和union是C语言的两种数据结构,这两种都是常用的复合结构. 区别: (1) 联合体:所有成员共用一块地址空间,也就是说联合体只放了一个被选中的成员: 结构体:所有的成员的内存占用是累加 ...

  7. 数据类型:Struct 和 Union区别

    参考:Struct 和 Union区别_firefly_2002的专栏-CSDN博客_union和struct的区别 Struct 和 Union有下列区别: 1.在存储多个成员信息时,编译器会自动给 ...

  8. 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 ...

  9. struct and union

    [url]http://hi.baidu.com/tweigh/blog/item/5303d2ef6e2720eace1b3e9d.html[/url] 1. struct的巨大作用 面对一个人的大 ...

最新文章

  1. 神经网络可解释性的另一种方法:积分梯度,解决梯度饱和缺陷
  2. 互联网IP路由的逐跳全局最优化原则-Dijkstra算法证明
  3. [转]编程语言中的 鸭子模型(duck typing)
  4. linux svn apt get,Ubuntu下安装SVN客户端
  5. SAP ABAP Netweaver Note download debug
  6. Github排序(转载)
  7. 业务分析岗所需具备的技能_成功的业务分析师需要具备的3种技能
  8. C#.Net工作笔记017---C#事件的理解以及自定义事件的方法
  9. 以太坊2.0合约余额新增13536 ETH
  10. 为什么会自动打开Nautilus文件管理器?
  11. 多态与虚函数(C++)
  12. sqlserver with 语法
  13. 大数据实战第十六课(上)-Spark-Core04
  14. 爬虫demo——爬取电影天堂的资源,存储到本地json文件
  15. 积极主动沟通说话交流的重要性和案例以及技巧
  16. java jxl导出excel小结
  17. 数据结构实验6图的应用-行车路线问题
  18. 张五常先生谈读书和思考的方法
  19. Tessellation on Any Budget
  20. MATLAB小提琴仿真(数学物理方程)大作业人工智能

热门文章

  1. php pdo 时间,php – 使用PDO执行时间记录查询 – 自动完成功能无效
  2. abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...
  3. MATLAB可以打开gms文件吗,GMS文件扩展名 - 什么是.gms以及如何打开? - ReviverSoft...
  4. 查看本地oracle密码,Oracle 本地验证和密码文件
  5. java api 框架_java常用对象API之集合框架
  6. DASH流媒体MPD文件解析
  7. Python中的标准数据类型
  8. 解决Mask RCNN自己航拍数据集训练的问题
  9. Python Qt GUI设计:QMainWindow、QWidget和QDialog窗口类(基础篇—10)
  10. 深度学习--TensorFlow (2)单层感知器2 -- 实现多数据分类