黑马程序员技术交流社区

标题: 2014.11.17学习小结之结构体内存分析 [打印本页]

作者: 736010695    时间: 2014-11-17 21:02
标题: 2014.11.17学习小结之结构体内存分析
本帖最后由 736010695 于 2014-11-18 16:41 编辑

#include <stdio.h>

int main()
{
//定义结构体变量类型,并不会分配存储空间
    struct date
    {
        int year;
        int month;
        int day;
    };
    //根据机构提类型定义结构体变量
/*根据结构体变量类型定义结构体变量名内存开始分配存储空间,分配的内存大小是所有成员内存大小的总和
,但必须是最大成员所占内存字节倍数,如果不,则就在所有成员内存总和的基础上往上加,直到成为最大成员内存倍数,这个叫做补齐算法,也叫对齐*/
    struct date d1 = {2014, 11, 17};
    printf("%p, %p, %p\n", &d1.year, &d1.month, &d1.day);
    /*结构体的成员储存和数组元素一样,都是根据顺序从上往下储存,跟内存寻址刚好相反,
     先定义的成员内存小,后定义的所占内存较大*/

    struct date d2 = {1990, 8, 22};
    //d2和d1是两个相互独立的变量,改了d1里成员的值不会影响d2,改了d2里成员值也不会影响d1
    d2 = d1;//这句是把d1的所有成员的值相对应的赋给d2的所有成员
    d2.year = 1990;
    printf("%d, %d, %d\n", d2.year, d2.month, d2.day);

    //对齐算法
    struct student
    {
        int age;
        char *name;
    };

    struct student stu;
    stu.age = 24;
    stu.name = "jimmy";
    //结构体内存必须是最大成员所占内存字节倍数
    /*这个结构体的内存大小为16,两个成员:int占4个字节,char *占8个字节,加起来是12,可是
     结构体的内存字节必须是最大成员内存字节的倍数,这里最大内存成员是指针char *,占8个,两
     个成员加起来是12,不够8的倍数,往上走到16是8的倍数,所以结构体的内存是16,这个叫补齐
     算法,也叫对齐*/

    return 0;
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2