37 结构体变量_初始化




01 自己建立结构体类型



C语言中允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体。在其他一些高级语言中称“记录”。

一般形式


struct 结构体名
{成员表列};

例如:




struct Student{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
};

Student为结构体名,它包含了 5 个成员,分别是 name、num、age、group、score。结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。

注意大括号后面的分号;不能少,这是一条完整的语句


结构体类型的名字是由一个关键字struct和结构体名组成而成的。结构体名是用户指定的,又称“结构体标记”,以区别于其他结构体类型。

花括号内是该结构体所包括的子项,称为结构体的成员。

对各个成员都应该进行类型声明,即:类型名 成员名。成员表列也称为域表,每一个成员是结构体中的一个域。

成员命名规则与变量名相同。


结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。

像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。


02 定义结构体类型变量



先声明结构体类型,再定义该类型的变量
(1)在定义了结构体变量后,系统会为之分配内存单元。根据结构体类型中包含的成员情况,在Visual C++中占63个字节。
(2)这种声明方式是声明类型和定义变量分离,在声明类型后可以随时定义变量,比较灵活。

在声明类型的同时定义变量



struct 结构体名
{
成员表列
}变量名表列;

例如:


struct Student{ //定义学生类结构体int stuId=10;//学号char sex='F';//性别  }stu1;


(2)声明类型和定义变量放在一起进行,能直接看到结构体的结构,比较直观。
(3)在写小程序时用此方式比较方便,但写大程序时,往往要求对类型的声明和对变量的定义分别放在不同的地方 ,以使程序结构清晰,便于维护。




03 结构体变量的初始化和引用



在定义结构体变量时可以对它的成员初始化。初始化列表是用花括号括起来的的一些常量,这些常量依次赋给结构体变量中的各成员。

可以引用结构体变量中成员的值,引用方式为:


结构体变量名.成员名.

例如:


stu1.sex


“.”是成员运算符,它在所有的运算符中优先级最高。


需要注意的是,结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。