C语言基础:C语言结构体(2) - 结构体的内存分析

上一节, 我们简单的介绍了结构体的一些知识点, 以及一些注意的事项, 这次我们来看看结构体是怎么样在内存存储的~


我们来看一个小例子:

#include <stdio.h>

int main()
{
    struct Date
    {
        int year;
        double dou;
        int month;
        int day;
    };
    
    struct Date D = {2014, 1.2, 9, 10};
    
    int c = sizeof(D);
    
    printf("size = %d\n", c);

    return 0;
}

输出的结果;



按照我们对类型来算, 3个int类型是12, 再加上一个double类型, 应该是20才对, 那为什么会24呢?


其实啊, 在结构体里, 是按照最长的类型倍数来存储的, 而这4个类型里面最长的就是double, 所以是输出24, 看看下面的示意图吧;



在结构体上, 这样子叫做对齐算法, 也可以成为补齐算法, 以最大的那个类型的倍数来存储, 不够存就添加都一个最长的, 哪怕是多余, 也不会理会~~


下面还有一个例子:

#include <stdio.h>

int main()
{
    struct Date
    {
        int year;
        int month;
        int day;
    };

    // 2.定义结构体变量(真正分配存储空间)
    struct Date d1 = {2011, 4, 10};

    struct Date d2 = {2012, 8, 9};

    // 会将d1所有成员的值对应地赋值给d2的所有成员
    d2 = d1;

    printf("d1 = %d - %d - %d\n", d1.year, d1.month, d1.day);
    printf("d1的地址为:%p\n", &d1);

    printf("d2 = %d - %d - %d\n", d2.year, d2.month, d2.day);
    printf("d2的地址为:%p\n", &d2);

    return 0;
}

输出的结果:



虽然代码里d1把值都赋给了d2, 但是它们也是互不相关的, 它们两个是独立的两个整体, 在后面随意怎么修改它们任意一个的值, 另一个也不会因为这样子而改变里面的值.


好了, 这次我们就讲到这里, 下次我们继续~~~

转载于:https://www.cnblogs.com/iOSCain/p/4282885.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值