C语言 结构体变量的定义
定义结构体变量的方法有三种:
(1)先定义结构体类型再定义结构体变量
结构体变量的定义形式为:
struct 结构体类型名 结构体变量名;
例如:
struct student stul,stu2;
定义了两个student结构体型变量,变量名分别为stul, stu2。像简单变量一样,定义了结构体变量后,系统会为之分配内存空间,结构体变量的各个成员在内存中是连续存放的。student结构体型变量stul、stu2在内存中的存储形式如图所示。
sno sname age depmt cscore
1001 | Zhangsan | 20 | Computer | 89 |
1002 | Lisi | 18 | Computer | 80 |
说明:
①对于结构体变量,必须先定义结构体类型,之后用结构体类型去定义该结构体型变量。
②结构体变量名的命名规则遵循标识符的命名规则。
③定义结构体变量时struct关键字不可以省略,例如,写成如下形式是错误的:
student s1;
一般在开发一个大型程序中,将结构体类型的声明都集中在一个头文件中(.h ),其他源文件需要用这些结构体定义变量,就在源程序的前面用文件包含命令#include <文件名>将该头文件包含进去。这样的做法便于代码重用,便于修改及装配。
(2)在声明结构体类型的时候定义结构体变量
可以在声明结构体类型的同时定义变量,其形式为:
struct 结构体类型名
{
结构体成员1;
结构体成员2;
…
结构体成员n;
}变量名1,变量名2,…变置名n;
例如:
struct student
{
int sno;
char sname[10];
int sage;
char depmt[20];
float cscore;
}stul,stu2;
这种定义结构体变量的方法和第一种的作用是相同的,即先定义结构体类型,然后马上定义两个结构体变量。
使用这种方法定义结构体变量后,也可以使用第一种方法继续定义其他的该结构体型的变量。
(3)省略结构体类型名的变量定义
可以不为结构体赋类型名而直接进行结构体变量的定义,其形式为:
struct
{
结构体成员1;
结构体成员2;
…
结构体成员n;
}变量名1.变M名2,…变量名n;
例如:
struct
{
int sno;
char sname[10];
int sage;
char depmt[20];
float cscore;
}stul,stu2;
这种定义方法与前两种定义的作用相同,不过当省略结构体类型名后,只能把程序中所有用到的结构体变量都直接定义在结构体类型的后面,而不能在程序中使用第一种方法再次定义了。所以有时候使用起来不太方便。
关于结构体变量的几点说明:
①结构体类型与结构体变量是不同的概念,可以对结构体变量存取、赋值或计算,而不能对一个结构体类型赋值。在编译时,只对结构体变量分配内存空间,而结构体类型是不占内存空间的。也就是说,结构体类型是虚的概念,里面并不存储实质性的内容,而结构体变量则是一个实际的变量,里面可按要求存储各种数据。类似于要建造一个楼房,必须先有房屋设计图纸,按照图纸施工,建立起一个真正的楼房。结构体类型就相当于图纸,图纸是虚的,结构体类型也是虚的,没有人会住在图纸上。而按照图纸施工建造起来的楼房是实实在在的存在,结构体变量相当于实际的楼房,楼房中可以住人(相当于结构体变量的值),结构体变量中也可以存储数据。按照图纸建造起的楼房可以是一幢楼房,也可以是多幢楼房,但按一个图纸建立起的多幢楼房的结构应该都是相同的。
②结构体变量和普通的简单变量一样使用,可以赋值、输入输出等。结构体变量中的成员也可以单独作用,相当于普通变量。
③结构体成员也可以是一个结构体变量。
④成员名可以和变量名相同,两者不代表同一个对象,互不干扰,例如:
struct date year;
year.year =1980;
定义了一个date型结构体类型,其中有一个year成员,之后又用该结构体类型去定义一个名为year的变量。这种使用方法是允许的。
点击加载更多评论>>