(1)、结构体
基本类型 int、double、char、float、short、long等等
复合类型 数组、结构体
指针类型
空类型
1)定义结构体,不会在内存内给分配空间
struct s1 { char ch; int i; float f; char array[3]; }; | struct s2 { struct s1 s; //嵌套定义 char ch; int i; float f; }; |
2)定义结构体变量
struct s1 varname;
3)#define 与 typedef定义别名替代 struct name
4)结构体初始化
5)结构体赋值
先定义结构体变量,然后用变量.结构体子成员名称
6)指针与结构体
7)字节对齐的概念
变量在内存里排放时有对齐的概念,所谓某个变量是N字节对齐的,就是说该变量的“内存起始地址值”%N = 0;
a、基本类型自身对齐值
基本类型:char 1 short 2 (32bitmachine——int float long 4 double 8)
结构体类型:成员中基本类型的自身对齐值最大的那个值。
b、指定对齐值
使用#pragma pack(N)或__attribute__((aligned(N)))在定义结构体时指定对齐值N。但Gcc对32位机缺省情况下指定对齐值为4。
c、有效对齐值
最终决定数据存放地址方式的值,取值对象为自身对齐值和指定对齐值中较小的那个值。
srtuct s {
char c; //1
int i; //4 按4对齐
};
那么sizeof(struct s) = 8;
(2)、共用体(联合体)union
各成员在内存中共用一块空间,与结构体在内存中使用空间情况相反。
程序运行时无时不刻在访问内存,深刻理解内存管理机制有利于更好地学习 C