struct和union

         突然发现以前理解的结构体占用的字节数错了,以为是里面各个元素占的字节数总和,哎,发现自己c语言基础太差。

         一,如果结构体中不含有数组如下s1,s2:

struct
{ 
	short a;    //2     2     
	char b;     //1     1
	            //      1      (4)
	float c;    //4     4
}s1;  //8

struct 
{
    char  a;        //1     
	int b;          //4       
	                //3        (8)
	double c;       //8   
}s2;   //16

 

      先找出元素类型中占用字节最大的值max,然后按照max字节对齐方式,逐个分配内存空间。

      如上面s1,max=sizeof(float)=4,a为short占2,因为4字节照齐,所以还有2,然后分配b一个字节,还剩一个空,接着c占4个字节。最终8字节一定是max的整数值。s2呢,a占1个字节,加7个字节补齐,b占4字节,所以,7字节中4个分配给b,还剩3个补齐,接着c分配8个,s2总共16字节。

二,如果结构体中含有数组的话,其实也是一样的,不过麻烦点而已。

struct
{
	char ch[10];   //1      10
	               //       6     (16)
	double d;      //8      8
	int a;         //4      8
}s3;  //32

struct
{
	char ch[10];   //1     10   
	int a;         //4      4   
	               //       2   (16)
	double d;      //8      8   
}s4;  //24

 

       如上s3,max=sizeof(double)=8,所以是8字节照齐,以为sizeof(ch)本身占10,所以还有6字节补齐(d占用8个字节),然后d分配8个字节,最后a分配4个字节,再加4字节补齐,所以sizeof(s3)=32。如果改变其中的顺序,也会重新改变的,如s4,ch占10个字节,然后加6字节补齐,但是下一个a占4字节,所以6个字节中4个分配给a,还余2字节。接着d分配8字节,sizeof(s4)=24。

三,union中元素占用同一片空间,计算类似于struct。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值