先說結構體
結構體的定義很簡單,注意這裡並不分配空間
//這裡只是定義一個簡單的結構體類型,並不為其分配內存空間 struct student { int num; char name[20]; };定義結構體變量:
struct student stu;
struct student stu; printf("struct size->%lu\n", sizeof(stu));//結果是24 printf("int size->%lu\n", sizeof(int));//結果是4 printf("char[20] size->%lu\n", sizeof(char[20]));//結果是20
struct student { int num; char sex; char name[20]; };
struct student stu; printf("struct size->%lu\n", sizeof(stu)); //28 printf("int size->%lu\n", sizeof(int)); //4 printf("char size->%lu\n", sizeof(char)); //1 printf("char[20] size->%lu\n", sizeof(char[20])); 20
struct student { char name[23]; int num; char sex; };
struct大小將變成32,這是為什麼呢?
這就和操作系統的內存管理有關了,操作系統為了方便管理內存,一般是以一定數量的字節為單位進行管理的,比如這裡是以以四字節為單位的,也就是說如果在struct中出現不足4字節整數倍的變量,就會為其分配四字節整數倍的空間,如果下一個變量仍不足四字節整數倍,就會和上邊的變量“湊合一下”,共用某一個四字節。當然,內存管理設計的東西不是一句兩句能說清楚的,這裡只是簡單地介紹一下,拋磚引玉,更深的東西大家可以自行學習……
至於union,聯合體或者叫做共用體,union使用方法和struct非常相似,唯一的不同是struct變量所占內存長度是各成員的內存之和,而union內存長度則是占內存最大的成員的長度,也就是說union的幾個成員變量是共用一塊內存的。