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\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

 

转载于:https://www.cnblogs.com/heml/p/3530874.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值