结构

结构声明structure declaration:

1
2
3
4
5
6
7
struct book {
    char title[MAXTITL];
    char author[MAXAUTL];
    float value;
};

struct book library; // 把library声明为一个使用book结构布局的结构变量

结构可以嵌套。

结构对象使用 . 访问成员变量。

结构指针使用 -> 访问成员变量。

一个结构可以赋值给另一个结构。

1
2
struct names right_field = {"Kiyon", "Lin"};
struct names captain = right_field;

联合

联合(union)是一种数据类型,它能在同一个内存空间中储存不同的数据类型(不是同时储存)。其典型的用法是,设计一种表以储存既无规律,事先也不知道顺序的混合类型。

1
2
3
4
5
union hold {
    int digit;
    double bigfl;
    char letter;
};

声明的联合只能储存一个int类型的值或者一个double类型的值,或者char类型的值。并且编译器分配的内存是联合声明中占用最大字节的类型内存。

1
2
3
4
union hold fit;
fit.digit = 23; // 把23储存在fit, 占2字节
fit.bigfl = 2.0; // 清除23,储存2.0,占8字节
fit.letter = 'h'; // 清除2.0, 储存h, 占1字节

枚举类型

可以用枚举类型(enumerated type)声明符号名称来表示整型常量。使用enum关键字声明。

1
2
3
4
5
6
7
enum spectrum {red, orange, yello, green, blue, violet};
enum spectrum color;

int c;
color = blue;
if(color == yellow);
for(color = red; color <= violet; color++);

函数指针

1
2
3
4
void (*pf)(char *); // pf是一个指向函数的指针

// 使用
void show(void (*pf)(char *), char *str);

可以使用回调函数的思路理解。

使用 typedef 创建别名:

1
2
3
typedef void (*V_FP_CHARP)(char *);
void show(V_FP_CHARP fp, char *);
V_FP_CHARP pfun;