[POINTERS ON C] 第十章结构和联合

[POINTERS ON C] 第十章结构和联合
1. 聚合类型

结构和联合
结构 : 标量类型(内置类型)
struct tag { member-list } var-list;

下面是2个不同的结构:
struct {
    
int    a;
    
char   b;
    
float  c;
} x;

struct {
    
int    a;
    
char   b;
    
float  c;
} y;

typedef 用法:
typedef  struct  MyStruct_Tag {
    
int     a;
    
char    b;
    
float   c;
} MyStruct

直接访问 :  结构名.成员名
间接访问 :  结构指针->成员名

不完整声明 : 类似函数声明
struct  B;

struct  A {
    
struct  B   * partner;
}

struct  B {
    
struct  A   * partner;
}

初始化 : 
typedef  struct  {
    
int     a;
    
char    b;
    
float   c;
} Simple;

struct  INIT_EX {
    
int     a;
    
short   b[ 6 ];
    Simple c;
} x 
=  {  10 , { 1 , 2 , 3 , 4 , 5 , 6 }, { 12 ' x ' 6.9 } };

2. 结构的存储分配

满足边界对齐要求:
结构的起始存储位置必须是结构中边界要求最严格数据类型所要求的位置
结构的成员存储位置必须满足各自的存储要求

求偏移量函数:
offsetof ( type, member ); //stddef.h

3. 作为函数参数

值     : 结构的一份拷贝
指针 : 地址的一份拷贝

4. 位段

struct  CHAR {
    unsigned  ch      : 
7 ;
    unsigned  font    : 
6 ;
    unsigned  size    : 
13 ;
}

5. 联合

所有成员引用的是内存中的相同位置
长度是最长成员的长度

初始化:必须是联合第一个成员的类型
union {
    
int     a;
    
float   b;
    
char    c[ 4 ];
} x 
=  {  6  };

你可能感兴趣的:([POINTERS ON C] 第十章结构和联合)