黑马程序员技术交流社区
标题: 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 |