5.3.7 C51的嵌套式结构

在C51语言中,除了前面介绍的基本形式的结构外,还可以采用嵌套式结构。嵌套式结构是指结构的结构成员中包含其他的结构,也叫多重结构。多重结构在结构变量的使用一节曾经涉及,在这里作详细的说明。声明嵌套式结构的示例如下。


struct lesson//定义结构lesson

{

float Chinese;//中文成绩

float English;//英文成绩

float Math;//数学成绩

};

struct student//定义结构student

{

int num;//学号

char name[20];//姓名

char sex[2];//性别

int age;//年龄

struct lesson result;//各科成绩

}Bob;


在本例中,先定义了结构lesson,该结构由Chinese、English和Math 3个成员组成。然后定义了结构student,其中结构student的成员result是一个嵌套结构变量,即结构student内部又出现了结构lesson,即所谓嵌套式结构。引用嵌套式结构成员的表达方式如下。


结构变量名.嵌套结构变量名.结构成员名


例如,Bob.result.Math,即为引用结构变量Bob的嵌套结构成员result的成员Math。

嵌套式结构中的结构可以嵌套很多层,结构成员名为最内层结构中的成员名。嵌套结构的成员名的引用,是从最外层直到最内层逐个被列出的。对于嵌套式结构,必须逐级找到最内层结构中的结构成员才能正确使用嵌套式结构变量。嵌套式结构变量的程序示例如下。


include<stdio.h>//头文件

struct lesson//声明结构lesson

{

float Chinese;//语文成绩

float English;//英语成绩

float Math;//数学成绩

};

struct student//声明结构student

{

int num;//学号

char name[20];//姓名

char sex[2];//性别

int age;//年龄

struct lesson result;//各科成绩

};

void main()//主函数

{

struct student Bob;//声明结构变量

Bob.num=210;

Bob.name=“Bob”;//对每个成员进行赋值

Bob.sex=“M”;

Bob.age=22;

Bob.result.Chinese=90.5;

Bob.result.English=87.5;

Bob.result.Math=96.0;

printf(“%d%s%s%d%f%f%f\n”,//输出变量的成员值

Bob.num,Bob.name,Bob.sex,Bob.age,Bob.result.Chinese,Bob.result.English,Bob.result.Math);

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


210 Bob M 22 90.500000 87.500000 96.000000


本例中,先定义结构lesson和结构student。其中结构student为嵌套式结构,其成员result为嵌套结构变量。在主函数中,首先声明结构变量Bob,并对其中的各结构成员单独进行赋值,在赋值时要注意成员result为嵌套结构变量,其最内层结构lesson中的成员分别是Chinese、English和Math,所以对其赋值,要对其最内层结构中的成员分别赋值。最后打印输出Bob的各个成员的值。

提示C51没有限制结构嵌套的层数,但嵌套层数一般很少超过3层。