结构和联合

结构

属于标量类型

struct SAMPLE {
  int age;
  char *name;
} y[20], *z;

# 之后可以
struct SAMPLE x;

//合并
struct INIT {
  int age;
  short b[10];
  struct SAMPLE c;
} x = {
    10,
    {1,2,3}
    {25, 'a'}
}

存储

结构的地址和结构第一个成员变量的地址是一样的(可以通过强转进行切换)

不能通过第一个变量,+1来直接访问下一个变量

结构成员会有边界对齐的操作,而系统原因,结构的初始位置必须和第一个成员一样,既不能有空白。

可以通过offsetof 宏获悉结构中制定成员的存储偏移。

位段(bit-field)

声明和结构类似,成员实际上存储于一个或多个整型变量

可以指定每个成员的位数,

移植性不高(比如int的解释,比如最大位数的兼容,比如实现时地址是ltr或者rtl)

还有一个使用的目的是,每个位段成员都很小,相对于移位操作,可以可读性更高的访问:

联合

声明和结构类似,但是i和f 写入/读取的是内存中的同一个位置 初始化时只能初始化为第一个成员的类型

联合的长度是最长成员的长度

Last updated