码迷,mamicode.com
首页 > 其他好文 > 详细

结构体大小的计算方法

时间:2020-04-12 22:29:00      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:code   整数   char   ble   oat   float   union   类型   eof   

******************************************************************************************

结构体大小的计算方法:

1.结构体成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)。

2.结构体大小必须是所有成员大小的整数倍。

******************************************************************************************

1.简单结构体,sizeof(s1)=8

1 struct s1
2 {
3     char ch1;//1
4     char ch2;//2
5     int i;//8
6 };

2.简单结构体(数据的顺序改变了),sizeof(s2)=12

1 struct s2
2 {
3     char ch1;//1
4     int i;//8
5     char ch2;//12
6 };

3.成员包含数组的结构体,sizeof(s3)=20

1 struct s3{
2     char ch;//1
3     int i;//8
4     char str[10];//20
5 };

4.成员包含结构体的结构体,sizeof(s4)=20

 1 struct s4
 2 {
 3     char ch;//1
 4     int i;//8
 5     struct s
 6     {
 7         char ch1;//12
 8         int j;//16
 9     };
10     
11     float f;//20
12 };

5.成员包含联合体的结构体,sizeof(s5)=12

 1 struct s5
 2 {
 3     char ch;//1
 4     int i;//8
 5     union    //联合体大小就是成员中最大类型的大小  //12
 6     {
 7         char ch1;
 8         int j;
 9     };
10 };

6.指定对齐值

(1)对齐值小于结构体成员最大值

1 #pragma pack(4)  //指定向4对齐,最大是8
2 
3 struct s6
4 {
5     char ch;//1
6     int i;//8
7     float f;//12
8     double d;//20
9 };

(2)对齐值大与结构体成员最大值

1 1 #pragma pack(10)  //指定向10对齐,最大是8
2 2 
3 3 struct s7
4 4 {
5 5     char ch;//1
6 6     int i;//8
7 7     float f;//12
8 8     double d;//24
9 9 };

******************************************************************************************

 

结构体大小的计算方法

标签:code   整数   char   ble   oat   float   union   类型   eof   

原文地址:https://www.cnblogs.com/huanian/p/12687850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!