"本章主要介绍了C语言中的编译预处理和结构体与共用体的概念,包括宏定义、文件包含以及结构体的定义、引用、数组和指针的使用。"
在C语言中,编译预处理是程序编译过程的一部分,它处理源代码中的特定指令,如宏定义(macro definition)和文件包含(file inclusion)。宏定义允许程序员创建简短的符号来代替复杂的表达式或者代码块,以提高代码的可读性和复用性。例如,`#define PI 3.14159`定义了一个名为PI的宏,用于表示圆周率。宏定义可以是无参数的,也可以带参数,如`#define SQUARE(x) (x)*(x)`,这个宏接受一个参数x并返回它的平方。
文件包含是另一种编译预处理操作,它可以将一个文件的内容插入到另一个文件中。`#include`指令有两种形式:尖括号包围的`#include <file>`通常用于包含标准库头文件,而双引号包围的`#include "file"`用于包含用户自定义的头文件。
接下来,章节介绍了结构体(struct),这是C语言中一种复合数据类型,用于组合不同类型的数据成员。结构体的定义包括定义结构体的名字和其包含的成员,如:
```c
struct student {
char name[10];
int score[3];
float aver;
};
```
结构体变量的定义有三种方式:先定义结构体类型再定义变量,同时定义类型和变量,以及直接定义类型变量。结构体变量可以进行初始化,例如:
```c
struct student stu1 = {"liming", {72, 87, 79}, 0};
```
结构体数组的定义与普通数组类似,只是每个元素都是一个结构体。同样,可以有三种定义方式,包括在定义结构体类型后定义数组,同时定义类型和数组,以及直接定义结构体数组。结构体数组的元素可以通过下标访问,而其成员则通过点运算符`.`来访问,例如:
```c
struct student students[2] = {{"liming", {72, 87, 79}, 0}, {"wangli", {70, 80, 90}, 0}};
printf("%s's average score is %.2f\n", students[0].name, students[0].aver);
```
此外,结构体还可以与指针结合使用,结构体指针可以指向结构体变量,通过解引用操作(*)访问结构体成员,这样提供了更灵活的编程方式。
总结起来,本章涵盖了C语言中编译预处理的重要概念,如宏定义和文件包含,以及结构体的基础知识,包括定义、初始化、数组和指针的使用,这些都是编写复杂C程序的基础。