5.3.3 结构变量的初始化

在C51语言中,声明结构变量的同时也可以对其进行初始化,其初始化的一般形式如下。


struct结构名

{

类型说明符变量名;

类型说明符变量名;

……

}结构变量={值,值,……};


其中,最后的“{}”内的值便是结构变量中各结构成员的初始值,需要按照结构成员的顺序来指定。结构变量初始化的程序示例如下。


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;//各科成绩

}Bob={110,“Bob”,“M”,21,{91.5,77.5,97.0}};

void main()//主函数

{

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编译环境中执行,运行的结果如下。


110 Bob M 21 91.500000 77.500000 97.000000


本例中,先声明结构lesson和结构student。其中结构student为多重结构,结构student中的成员result为结构lesson类型。在声明结构student时。同时声明并初始化了结构变量Bob。在主函数中,打印输出Bob的各结构成员的值。

在给结构变量赋值时要注意,C51语言规定不能在结构变量的结构体内直接给各结构成员赋值。例如,如下的代码是错误的。


struct student

{

char name[20]=“Bob”;

int num=110;

int age=21;

char sex[2]=“M”;

float score=93.5;

}Bob;


本例中,声明结构student和结构变量Bob都是正确的,但是因为直接在结构体内对各结构成员赋值,这在C51中是不允许的,所以以上代码是错误的。