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类型后,就可以向结构变量中的各结构成员赋值并使用该结构变量了。