1. 程式人生 > 實用技巧 >sizeof()學習記錄

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

結構體分配的空間如下圖所示: