#include <stdio.h> int main() { /*************************************************** * * 结构体内存分析(注意结构体里面定义成员结束后要使用分号): * struct Date * { * int year; * int month; * int day; * }; * struct Student * { * int age; * char sex; * }; * struct Stu * { * int age; * char a; * char b; * char c; * char d; * }; * 理论上:结构体所占用的存储空间是各个成员变量所占的存储空间之和。 * 但是由于性能等原因分配内存是按照补齐算法进行分配。 * 补齐算法(对齐算法):结构体所占用的存储空间,必须是所有成员中占用存储空间最大的成员的倍数 * 结构体成员内存分配:分配内存是按照高位寻址,但是结构体分配内存时,把低位内存分配给最先定义的变量 * 注意: * 1.定义结构体类型(并不会分配存储空间) * 2.定义结构体变量(真正分配存储空间) * ****************************************************/ struct Date { int year; int month; int day; }; printf("Date类型占用的存储空间是:%d\n", sizeof(struct Date)); struct Student { int age; char sex; }; printf("Student类型占用的存储空间是:%d\n", sizeof(struct Student)); struct Stu { int age; char a; char b; char d; }; printf("Stu类型占用的存储空间是:%d\n", sizeof(struct Stu)); struct St { int age; char a; char b; char d; }; printf("St类型占用的存储空间是:%d\n", sizeof(struct St)); struct Date date = {1989, 2, 4}; printf("date变量的地址是:%p\n", &date); printf("year变量的地址是:%p\n", &date.year); printf("month变量的地址是:%p\n", &date.month); printf("day变量的地址是:%p\n", &date.day); return 0; }
Date类型占用的存储空间是:12 Student类型占用的存储空间是:8 Stu类型占用的存储空间是:8 St类型占用的存储空间是:8 date变量的地址是:0022fee4 year变量的地址是:0022fee4 month变量的地址是:0022fee8 day变量的地址是:0022feec