结构体
不同类型数据的集合
定义
1 | struct 结构名 |
1 | struct student |
初始化,可直接清空
memset
函数原型:
1 | void *memset(void *s, int ch, size_t n); |
1 | memset(&st, 0, sizeof(st)); //用0填充st内存 |
memcpy
函数原型:
1 | void *memcpy(void *destin, void *source, unsigned n); |
1 | memcpy(st.name, "agp", strlen("agp")); //将“agp”复制到st.name内存中 |
typedef
使用typedef创建结构体、共用体、枚举类型别名
1 | typedef struct date |
结构体指针变量访问成员
访问方法,指针用-> .
大小 内存对齐 X86 默认4字节对齐
1 | #pragma pack(1) 修改内存对齐为1 |
sizeof(结构名或者变量名)
对齐原因:有些平台每次读都是从偶地址开始,如果一个int型(假设为 32位)如果存放在偶地址开始的地方,那么一个读周期就可以读出,而如果存放在奇地址开始的地方,就可能会需要2个读周期,并对两次读出的结果的高低 字节进行拼凑才能得到该int数据。显然在读取效率上下降很多。这也是空间和时间的博弈。
http://baike.baidu.com/view/925608.htm
原则:地址可以被整除
结构数组
地址1 结构1
地址2 结构2
…
共用体union
共用一块内存,某个时刻只有一个有效
1 | union data |
枚举enum 提高程序可读性
有名字的整形常量的集合,该类型变量只能取其中的一个值
1 | enum week {sun, mon, tue, wed,thu, fri, sta}; 不赋值 默认从0开始 |