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 };

结构体分配的空间如下图所示:

原文地址:https://www.cnblogs.com/QQ2962269558/p/13414040.html