sizeof()學習記錄
阿新 • • 發佈:2020-08-01
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 };
結構體分配的空間如下圖所示: