本帖最后由 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; }
|