“结构体”是一种构造类型,由若干成员组成。每一个成员可以是基本数据类型,也可以仍是一个构造类型。C语言本身没有这种数据类型,因此在使用之前需要先自己定义。
结构体类型的定义
结构体类型定义的一般形式:
struct 结构体名 { 类型标识符 成员名1; 类型标识符 成员名2; ... 类型标识符 成员名n; };
举例:
struct date /* 定义表示日期的结构体类型 */ { int year; int month; int day; };
struct student /* 定义一个学生结构体,用于描述学生的学号,姓名,性别,出生年月和成绩 */ { int num; char name[20]; char sex; struct date birthday; /* birthday是struct date类型 */ float score; };
结构体变量的定义与初始化
定义结构体类型的变量有三种方法:
1.先定义结构体类型,再定义该类型变量。这种方法在定义好类型后,可以随时定义更多的变量,比较灵活。
struct student /* 定义一个学生结构体,用于描述学生的学号,姓名,性别,出生年月和成绩 */ { int num; char name[20]; char sex; struct date birthday; /* birthday是struct date类型 */ float score; }; struct student stu1,stu2;
2.在定义结构体类型的同时定义结构体变量。这种方法在编写短小程序时比较方便。
struct student /* 定义一个学生结构体,用于描述学生的学号,姓名,性别,出生年月和成绩 */ { int num; char name[20]; char sex; struct date birthday; /* birthday是struct date类型 */ float score; }stu1,stu2;
3.直接定义结构体变量。这种方法不推荐使用。
struct { int num; char name[20]; char sex; struct date birthday; /* birthday是struct date类型 */ float score; }stu1,stu2;
结构体类型变量在定义时可以直接初始化。(三种定义方法都可直接初始化)
初始化的一般方法:
struct 结构体名 { 结构体成员列表; }结构体变量={初始数据表};
注: 初始化时,不一定所有的成员都赋值,可以初始化部分成员。初始化数据之间要用“,”隔开,不进行初始化的成员项也要用“,”跳过。初始数据必须与其对应成员的数据类型相一致。
结构体变量的引用
表示结构体成员的一般形式:
结构体变量名.成员名
挡结构体类型中嵌套另一个结构体类型时,使用逐级访问的方法访问成员
例如:
stu1.score stu1.birthday.year /* 逐级访问 */
例子:
#include <stdio.h> void main() { struct student { int num; char name[20]; char sex; int age; }stu={8001,"Zhang san",'m',18}; printf("Number=%d\nName=%s\n",stu.num,stu.name); printf("Sex=%c\nAge=%d\n",stu.sex,stu.age); }
程序运行结果:
Number=8001 Name=Zhang san Sex=m Age=18