1、文件包含
(1)1个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。
(2)文件包含允许嵌套,即在一个被包含的文件种包含另一个文件。
(3)包含命令中的文件名可以用双括号括起来,也可以用尖括号括起来。但这两种形式是有区别的:使用尖括号表示在包含文件目录中去查找;使用双引号表示首先在当前的源文件目录中去查找,若未找到则到包含目录中去查找。
条件编译
预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件,这对程序的移植和调试是很有用的。
规则:#ifdef 标识符
程序段1
#else
程序段2
#endif
功能:若标识符已被#define命令过这对程序段1进行编译,否则对程序段2进行编译。若没有程序段2,则#else可不写。
2、结构体
有时需要将不同类型的数组和成一个有机的整体,以便于引用。
定义一个结构体的一般形式为:
struct 结构名
{
成员表列
};
成员表列由若干个成员组成,每个成员都是该结构的组成部分,对每个成员也必须做类型说明,其形式为:类型说明符 成员名
例:
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }
可采取以下三种方法定义结构体类型变量:
(1)先声明结构体类型再定义变量名
例:strct student student1,student2;
定义了student1和student2为strct student类型变量,即它们具有strct student类型的结构。
在定义结构体变量后,系统会为之分配内存单元。
(2)在声明类型的同时定义变量
这种形式的定义一般形式为:
struct 结构体名
{
成员表列
}变量名表列;
例:
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }student1,student2;
(3)直接定义结构体类型变量
一般形式为:
struct
{
成员表列
}变量名表列;
即不出现结构体名。
3、结构体嵌套:
例:
1 #include "StdAfx.h" 2 #include<stdio.h> 3 #include<string.h> 4 5 void main() 6 { 7 struct date 8 { 9 int month; 10 int day; 11 int year; 12 }; 13 struct 14 { 15 int num; 16 char name[20]; 17 char sex; 18 struct date birthday; 19 float score; 20 }boy1,boy2; 21 }
结构体变量的引用
规则:(1)不能将一个结构体变量作为一个整体进行输入和输出。
引用方式:结构体变量名.成员名
”.“是成员运算符,它在所有的运算符中优先级最高,因此可以把student1.num作为一个整体来看待。
例:student1.num=100是将100赋值给student1变量中的成员num。
例:
#include "StdAfx.h" #include<stdio.h> void main() { struct date { int month; int day; int year; }; struct { int num; char *name; char sex; struct date birthday; float score; }boy1,boy2; boy1.num=007; boy1.name="jame"; scanf("%c%f",&boy1.sex,&boy1.score); boy2=boy1; printf("Number=%d Name=%s ",boy2.num,boy2.name); printf("sex=%c score=%f ",boy2.sex,boy2.score); }
(2)若成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级成员。只能对最低级的成员进行赋值或存取运算。
例:
#include "StdAfx.h" #include<stdio.h> void main() { struct date { int month; int day; int year; }; struct { int num; char *name; char sex; struct date birthday; float score; }boy1,boy2; boy1.num=007; boy1.name="jame"; scanf("%c%f",&boy1.sex,&boy1.score); scanf("%d",&boy1.birthday.year); scanf("%d",&boy1.birthday.month); scanf("%d",&boy1.birthday.day); boy2=boy1; printf("Number=%d Name=%s ",boy2.num,boy2.name); printf("sex=%c score=%f ",boy2.sex,boy2.score); printf("birthday:%d/%d/%d",boy1.birthday.year,boy1.birthday.month,boy1.birthday.day); }
(3)对结构体的变量成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)
例:student2.score=student1.score;
sum=student2.score+student1.score;
(4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。
例:
#include "StdAfx.h" #include<stdio.h> void main() { struct date { int month; int day; int year; }; struct { int num; char *name; char sex; struct date birthday; float score; }boy1; boy1.num=007; boy1.name="jame"; printf("The address of struct is %o: ",&boy1); printf("The address of num is %o: ",&boy1.num); }
注:不能整体读入结构体变量。
例:scanf("%d,%s,%c,%d,%f,%s",&student1);
结构体变量的地址主要用作函数参数,传递结构体变量的地址。