C语言结构体内存分配详情

#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
", sizeof(struct Date));
    struct Student
    {
        int age;
        char sex;
    };
    printf("Student类型占用的存储空间是:%d
", sizeof(struct Student));
    struct Stu
    {
        int age;
        char a;
        char b;
        char d;
    };
    printf("Stu类型占用的存储空间是:%d
", sizeof(struct Stu));
    struct St
    {
        int age;
        char a;
        char b;
        char d;
    };
    printf("St类型占用的存储空间是:%d
", sizeof(struct St));
    struct Date date = {1989, 2, 4};
    printf("date变量的地址是:%p
", &date);
    printf("year变量的地址是:%p
", &date.year);
    printf("month变量的地址是:%p
", &date.month);
    printf("day变量的地址是:%p
", &date.day);
     return 0;
}
Date类型占用的存储空间是:12
Student类型占用的存储空间是:8
Stu类型占用的存储空间是:8
St类型占用的存储空间是:8
date变量的地址是:0022fee4
year变量的地址是:0022fee4
month变量的地址是:0022fee8
day变量的地址是:0022feec
原文地址:https://www.cnblogs.com/heml/p/3530874.html