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中是不允许的,所以以上代码是错误的。