在C语言里面,我们学过的数据基础类型有char、short、int、long等,并且还学习了通过数组来构造数据的集合。但是在不同的情况下,我们往往需要一些不同的数据类型组合成一种新的数据结构。
例如:编写一个学生信息管理程序时,就需要存储学生的信息,学生的信息包括学生名称、学号、性别、年龄等数据。学生信息都是不同类型的数据,描述一个学生的信息需要定义(声明)多个不同数据类型的变量,同时还需要一个数组来描述多名学生的信息。
C语言提供了一种可以自定义的数据类型,用来描述类似学生信息这样的结构化数据。定义结构体的语法为:
struct 结构体名{
类型名1 成员名1;
类型名2 成员名2;
……
类型名n 成员名n;
};
其中,struct是定义结构体的关键字,结构体名是结构体的名称,是合法的C语言标识符。结构体主体使用一对大括号封闭起来,在结构体主体内,可以定义多个结构体成员,每个结构体成员定义方式和变量的声明方式相同,成员之间用分隔符“;”隔开。
例如:学生信息结构体。
struct STUDENT{
// 学生姓名
char* name;
// 年龄
int age;
// 学号
char* student_id;
};
上面定义了一个名称为STUDENT的结构体,定义结构体名称时,一般全部采用大写,当然也可以按照自己的喜好来命名,全部采用大写可以和变量名称区分开,结构体有name、age、student_id三个成员。
定义的结构体只是一种自定义的数据类型,结构体的使用和其它数据类型的使用完全相同,需要在程序中定义一个结构体变量。
例如:下面定义了结构体STUDEN的结构体变量student,STUDEN是结构体,student是结构体变量。
STUDEN student;
也可以在定义结构体时,直接定义一个结构体变量。
struct STUDENT{
// 学生姓名
char name[30];
// 年龄
int age;
// 学号
char student_id[20];
} student;
为了访问结构体的成员,C语言提供了成员访问运算符“.”。成员访问运算符是结构体变量名称和要访问的结构成员之间的一个“.”符号,案例10-1演示了访问结构体成员的使用方法。
例【1】 使用结构体练习
程序清单 sample.c
#include <stdio.h>
#include <string.h>
// 定义学生信息结构体
struct STUDENT{
// 学生姓名
char* name;
// 年龄
int age;
// 学号
char* student_id;
} student;
// 程序主函数
void main()
{
// 初始化结构体变量student
// 访问结构体成员使用“.”运算符
student.age = 21;
student.name = "马汉";
student.student_id = "0001";
// 输出结构体变量student
printf("学号:%s\n姓名:%s\n年龄:%d\n",student.student_id,student.name,student.age);
}
例1定义了结构体STUDENT,并声明了结构体变量student,在main()函数内初始化结构体变量student,并输出结构体变量成员信息。