5.3.2 结构变量的声明
结构变量以自定义结构为类型说明符而声明的变量。要注意的是,结构名和结构变量是两个不同的概念。结构名只表示一个结构形式,编译系统并不对其分配内存空间。而结构变量是被声明为某种结构类型的变量,编译程序需要对该变量分配存储空间。在C51中,声明结构变量有以下的3种方法,这里以上面定义的学生成绩统计结构student为例来加以说明。
1.声明结构时,同时声明结构变量
在C51语言中,允许在声明结构时,同时声明结构变量,其一般形式如下。
struct结构名
{
类型说明符成员名;
类型说明符成员名;
……
}结构变量1,结构变量2,……;
其中,最后的结构变量即程序中所采用的变量名。可以同时声明多个结构变量,之间用逗号隔开。在定义结构的同时可以声明多个结构变量,示例如下。
struct student
{
int num;//学号
char name[20];//姓名
char sex[2];//性别
int age;//年龄
float score;//成绩
}Alice,Bob,Paul,Lily;
本例中,在声明结构student时,同时声明了Alice、Bob、Paul和Lily共4个结构变量。被声明为结构student的结构变量,都是由上述结构中的5个结构成员组成。
2.先定义结构,再定义结构变量
如果在声明结构的时候没有声明结构变量,则可以在结构定义之后,对结构变量单独进行声明。声明结构变量的一般形式如下。
struct结构名结构变量名1,结构变量名2,……;
其中,struct是类型标识符,结构名是已定义的结构,可以同时声明多个定义结构变量,之间用逗号隔开,示例如下。
struct student
{
int num;//学号
char name[20];//姓名
char sex[2];//性别
int age;//年龄
float score;//成绩
};
struct student Alice,Bob,Paul,Lily;
本例中,首先声明了结构student,然后声明了4个结构变量Alice、Bob、Paul和Lily。在C51语言中,也可以通过宏定义用一个符号常量来表示一个结构类型,示例如下。
define STU struct student
STU
{
int num;//学号
char*name[20];//姓名
char sex[2];//性别
int age;//年龄
float score;//成绩
};
STU Alice,Bob,Paul,Lily;
本例中,首先宏定义STU为struct student,然后对STU进行结构定义,最后使用STU对结构变量Alice、Bob、Paul和Lily进行声明。这样的表示方法是正确的。
3.直接声明结构变量
在C51语言中,还可以在程序中不声明结构名,而直接声明结构变量,示例如下。
struct
{
int num;//学号
char name[20];//姓名
char sex[2];//性别
int age;//年龄
float score;//成绩
}Alice,Bob,Paul,Lily;
本例中,在声明结构的时候没有给出结构名,而直接声明了4个结构变量Alice、Bob、Paul和Lily。此时,在程序中可以使用已声明的结构变量,但是不能再额外声明其他的结构变量。如果没有结构名加以区分,会发生错误。
使用直接声明结构变量的方法,与先定义结构再定义结构变量的方式的区别在于,直接声明结构变量时省略了结构名,而直接声明结构变量。无论采用何种方法,在声明了结构变量Alice、Bob、Paul和Lily为结构student类型后,就可以向结构变量中的各结构成员赋值并使用该结构变量了。