復習一下數組的內存存儲細節:
#include
int main(int argc,const char * argv[]) {
/*
// 1.定義結構體類型并不會分配存儲空間
struct Person{
int age; // 4
int height; // 4
int width; // 4
};
// 2.只有定義結構體變量才會真正的分配存儲空間
struct Person sp = {30, 1, 1};
//結構體第0個屬性的地址就是結構體的地址
printf("&sp = %p\n", &sp);
printf("age = %p\n", &sp.age);
printf("size = %lu\n", sizeof(sp));
//int nums[3] = {1, 3, 5};
// nums == &nums == &nums[0]
//和數組一樣,結構體內存尋址從大到小,存儲數組是從小到大(先存儲第0個屬性,再一次存儲其它屬性)
printf("height = %p\n", &sp.height);
printf("width = %p\n", &sp.width);
*/
/*
結構體如何開辟存儲空間
看上去,結構體分配存儲空間是將所有屬性占用的存儲空間的總和加在一起后再分配
注意:
其實結構體分配存儲空間本質上并不是將所有屬性占用的存儲空間的總和加在一起后再分配
而是會獲取結構體類型中占用內存最大的屬性的大小,然后取該大小的倍數
特例:
如果剩余的存儲空間"不夠"存儲將要存儲的數據,那么就會重新開辟8個字節的存儲空間,并且將需要存儲的數據放到新開辟的存儲空間中
如果剩余的存儲空間"夠"存儲將要存儲的數據,那么就不會開辟了
*/
struct Person{
//double height; // 8
int age;// 4
//int heigth; // 4
doubleheight;// 8
charc;// 1
//char *name; // 8
};
struct Person sp;
printf("size = %lu\n",sizeof(sp));
return0;
}