有时需要将不同类型的数据组合成一个有机的整体,以便于引用。 例如:一个学生的学号/姓名/性别/年龄/成绩/家庭地址等选项。这些项都与某一学生相联系。如果将学号(num)/姓名(name)/性别(sex)/年龄(age)/成绩(score)/地址(addr)分别定义为相互独立的简单变量,难以反映他们之间的内在关系,应当把他们组织成一个组合项,在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。 C语言允许用户自己制定这样一种数据结构,它称为结构体(structure); 代码如下: Struct student { intnum; Struct是申明结构char name[20]; 体类型时所必需的char sex; 关键字 int age; float score; charaddr[30]; };//注意不要忽略最后的分号
Struct student 是一个类型名,它和系统提供的标准类型(如:int/char/float/double等)一样具有同样的作用,都可以用来定义变量的类型,只不过结构体类型需要由用户自己指定而已 申明一个结构体类型的一般形式为:
Struct机构体名 {成员表列};
定义结构体类型变量的方法
1) 先申明结构体类型再定义变量
如上面已定义一个结构体类型struct student,可以用它来定义变量,例如: struct student student1,student2;
在定义了结构体变量后,系统会根据结构体内定义的数据类型,来为这个结构体变量分配相应的内存。 注意: i. 将一个变量定义为标准类型(基本数据类型)与定义为结构体类型不同之处在
于不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型(例如struct student类型), ii. 如果程序规模比较大,往往将对结构体类型的神明集中放在一个头文件(.h为后
缀)中。当那个源文件需要用到次结构体时则可以用#include将其包含进去。
在申明类型的同时定义变量
例如:
struct student {intnum;
char name[20]; 定义两个struct student类型的变量char sex; student1/student2. intage; float score; char addr[30]; }student1,student2; 它的作用与第一种方法相同,既定义了两个struct student类型的变量student1/student2 这种形式的定义的一般形式为:
struct结构体名 { 成员表列 }变量名表列;
直接定义结构体类型变量
其一般形式为:
Struct { 成员表列 }变量名表列;
注意:成员也可以是一个结构体变量。
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
结构体变量的引用
在定义结构体变量以后,当然可以引用这个变量。
1) 不能将结构体变量作为一个整体进行输入和输出。只能对结
构体变量中的各个成员分别进行输入输出 结构体变量名.成员名
2) 如果成员本身有属于一个结构体类型,则要用若干个成员运
算符,一级一级地找到最低的一级的成员。
3) 对结构体变量的成员可以像普通变量一样进行各种运算(根
据其类型决定可以进行的运算)。
4) 可以引用结构体变量成员的地址,也可以引用结构体变量的
地址。
用typedef命名已有类型 typedef存在的意义 除了可以直接使用
C
提供的标准类型名(如
int/char/float/double/long等)和自己声明的结构体/共用体/指针/枚举类型外,还可以用typedef声明新的类型名来代替已有的类型名。 例如: typdefint INTEGER; typedef float REAL; 可以声明结构体类型: Typedefstruct { int mouth; int day; int year; } DATE;
声明新类型名DATE,它代表上面指定的一个结构体类型。这时候就可以用DATE定义变量:
DATE birthday;(不要写成struct DATE birthday;) DATE *p; (p为指向此结构体类型数据的指针) 注意: typedef与#define 的区别
typedefint COUNT; 和
指定INTEGER代表int类型, REAL代表float; #define COUNT int
这二者的作用都是用COUNT代表int。二者的区别是:#define是在预编译时处理的,它只能做简单的字符串替换,而typdef是在编译时处理的。它不是做简单的字符串替换。
因篇幅问题不能全部显示,请点此查看更多更全内容