sizeof()学习记录
1 问题引出
在学习“二进制文件操作”时,书中有这么一个例程:
 1 #include <iostream>
 2 #include <fstream>
 3 using namespace std;
 4 
 5 struct student
 6 {
 7     char name[20];
 8     int num;
 9     char sex;
10     int age;
11 };
12 
13 int main()
14 {
15     student stud[3] = {"li", 1001, 'f', 18, "fun", 1002, 'm', 19, "wang", 1004, 'm', 17};
16     ofstream outfile("stud.dat", ios::binary);
17     if(!outfile)
18     {
19         cerr << "open error!" << endl;
20         abort();//退出程序
21     }
22     for(int i = 0; i < 3; i++)
23     {
24         outfile.write((char*)&stud[i], sizeof(stud[i]));
25     }
26     outfile.close();
27     return 0;
28 }
用记事本打开,显示乱码,如下所示:

用16进制格式打开,如下所示:

从上图中可以看出,给结构体分配的空间是4的倍数。
当把结构体修改一下:
1 struct student
2 {
3     char name[15];
4     char sex;
5     int num;    
6     int age;
7 };
结构体分配的空间如下图所示:

2 测试用例
1 typedef struct MyStruct 2 { 3 short a; 4 int a1; 5 double i; 6 }test; 7 8 cout << sizeof(test) << endl;

1 struct HisStruct 2 { 3 unsigned aa; 4 char bb[1]; 5 double cc; 6 short dd; 7 }; 8 9 cout << sizeof(
HisStruct
) << endl;

1 struct HisStruct 2 { 3 unsigned aa; 4 char bb[1]; 5 int c; 6 int d; 7 //double cc; 8 short dd; 9 }; 10 11 cout << sizeof(struct HisStruct) << endl;

1 typedef struct MyStruct 2 { 3 short a; 4 short a1; 5 short a2; 6 }test; 7 8 cout << sizeof(test) << endl;

1 typedef struct MyStruct 2 { 3 char a; 4 }test; 5 cout << sizeof(test) << endl;

1 typedef struct MyStruct 2 { 3 char a; 4 char a1; 5 char a2; 6 }test;

1 typedef struct MyStruct 2 { 3 char a; 4 double c; 5 char a1; 6 char a2; 7 }test;

总结:以结构体内最大数据类型的字节数进行补齐。
                    
                
                
            
        
浙公网安备 33010602011771号