struct与union

1. union的长度

union

{

  int k;

  int p[4];

  double q;

}data;

sizeof(data)=20;    //结构体中最大的数据长度

2.struct的长度

struct

{

  int k;

  double q;

}data;

sizeof(data)=16;  //结构体中最大的数据长度的倍数(默认情况,如果设置了不同的内存对齐另当别论);

          //如果以1字节、4字节对齐的话,sizeof(data)=12;

3.struct与union的联合使用

void struct_and_union_use()

{

  union

  {

    unsigned short i;

    struct

    {

      char first;

      char second;

    }half;  

  }data;

  data.i=0x4241;

  char tmp=data.half.first;    // 65-‘A‘; 97-‘a‘;  tmp=‘a‘或者tmp=‘b‘(视大小端决定);

}

时间: 2024-10-18 00:40:03

struct与union的相关文章

struct和union的区别

当初学习C语言时并没有特别注意 union 的用法,也不知道与 struc t相比有何不同.经过网上的一番搜索,现在总算是恍然大悟,所以就小结一下.如有错误之处,敬请指正.( struct 和 union 的结构定义形式没有多大差别,只要不是初学者,相信大家不会在这方面存在什么问题.) struct 简单来说就是一些相互关联的元素的集合,说是集合,其实它们在内存中的存放是有先后顺序的,并且每个元素都有自己的内存空间.那么按照什么顺序存放的呢?其实就是按你声明的变量顺序来存放的,下面先看一个例子:

2015-10-20 关于struct和union

1.结构体: 1.1.思考题:空结构体占用多大内存空间? ANS:不同的编译器,这个结果是不定的.在GCC下,空结构体占用0个字节的空间.在G++编译器下,空结构体占用1个字节的空间. 1.2.一个新的概念----柔性数组 柔性数组:数组大小待定的数组. C语言中结构体的最后一个元素可以为一个大小未知的数组.于是可以利用该特性来产生柔性数组: struct _soft_array { int len; int array[]; }; 此处有一个问题是需要注意的:sizeof(_soft_arra

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

转载地址:http://blog.csdn.net/firefly_2002/article/details/7954458 一.Struct 和 Union有下列区别: 1.在存储多个成员信息时,编译器会自动给struct第个成员分配存储空间,struct 可以存储多个成员信息,而Union每个成员会用同一个存储空间,只能存储最后一个成员的信息. 2.都是由多个不同的数据类型成员组成,但在任何同一时刻,Union只存放了一个被先选中的成员,而结构体的所有成员都存在. 3.对于Union的不同成

【转】C/C++ struct/class/union内存对齐

原文链接:http://www.cnblogs.com/Miranda-lym/p/5197805.html struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括stru

C/C++ struct/class/union内存对齐

struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括struct/class/uinon. 2).结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部"

关于C中struct和union长度的详解

这几天看<代码大全>中的第十三章---不常见的数据类型,里面讲解到了C语言中的struct以及对指针的解释,联想到以前看过相关的关于C语言中stuct长度的文章,只是现在有些淡忘了,因此今天把保存的资料重新拿出来温习一遍,同时写下这篇文章,对以前相关资料总结的同时顺便梳理一下已有的知识. 一.基本数据类型在内存中的长度 关于基本的数据类型,在不同的机器上占据的长度不一样.为了能够对数据的组合类型(这里只包括了struct和union)能够有一个清晰地认识,这里首先对基本的数据类型在不同位数(3

struct与union字节大小的终极解释

1.字节对齐的细节和编译器实现相关,但一般而言,如在windows下,就VC而言,满足一下三个准则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除:2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding): 即:在默认情况下,VC规定各成员变量存放的起始地址相对于结构的起始地址的偏移量:sizeof(类型)或其倍数3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译

C之 struct 和 union(十)

在 C 语言中我们经常会使用到 struct 和 union,那么它们两个各自有何特点呢?今天我们就一探究竟. 我们先来介绍下 struct .它可以看做是变量的集合,那么一个空的结构体占多大内存呢?这是一个有趣的问题,按照理论分析,它应该是0.但是按照 C 语言的设计思想来说,不可能存在空结构体的,定义一个空结构体没意义啊,所以应该报错的.下来我们就分别在 gcc 和 BCC 编译器上实验下.由于代码比较简单,就不贴代码了,我们直接来结果.图一为在 gcc 编译器下编译的,图二为在 BCC 编

struct和Union的内存分配

eg: struct node{ char c ; int x ; }; 在你定义一个这个的node后, 系统给它分配的内存不是简单的就是sizeof(char)+sizeof(int)= 5 :  而是采用内存对齐的方式 . 首先在计算机中 , 会有一个默认的参数 , 即对齐膜数 , 一般默认为8字节 , 但可以通过在程序中添加如下命令来改变其值 #pragma pack(n) ; 在知道对齐模数后, 就可以开始说对齐规则了 1:在系统给其分配内存时 , 是安照你定义的先后的原则 , 比如说上