九、用户自己建立数据类型——结构体变量和结构体类型的定义

1、自己建立结构体变量

在实际生活中,有些数据是有内在联系的,成组出现。例如一个学生的学号、姓名、年龄和成绩等项,是属于同一个学生的。人们希望把这些数据组成一个组合数据。C 语言允许用户建立不同类型数据组成的组合型的数据结构,它称为结构体。
struct 结构体名
{
}
结构体类型的名字是由一个关键字struct和结构体名组合而成的。结构体名是由用户指定的,又称"结构体标记”,以区别于其他结构体类型。花括号内是该结构体所包括的子项,称为结构体成员。各成员都应进行类型声明,即类型名 成员名,成员命名规则与变量名相同。
结构体类型并非只有一种,而是可以设计出许多种结构体类型。
成员可以属于另一个结构体类型。

2、定义结构体类型变量

前面只是建立了一个结构体类型,它相当于一个模型,并没有定义变量,其中并无具体数据,系统对之也不分配存储单元。相当于设计好了图纸,但是并未建成具体的房屋。为了在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。
可以采用以下三种方法来定义结构体类型的变量:

  1. 先声明结构体类型,再定义该类型的变量
    这种方式是声明类型和定义变量分离,在声明类型后可以随时定义变量,比较灵活。
  2. 在声明类型的同时定义变量
    struct 结构体名
    {
    成员表列
    }变量名表列;
    声明类型和定义变量放在一起进行,能直接看到结构体的结构,比较直观,在写小程序时用此方式比较方便,但在写大程序时,往往要求对类型的声明和对变量的定义分别放在不同的地方,以使程序结构清晰,便于维护,所以一般不多用这种方式。
  3. 不指定类型名而直接定义结构体类型变量
    一般形式为
    struct
    {
    成员表列
    }变量名表列;
    指定了一个无名的结构体类型,它没有名字(不出现结构体名字)。
    结构体类型与结构体变量是不同的概念,不要混淆。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。
    结构体类型中的成员名可以与程序中的变量名相同,但二者不代表同一个对象。
    对结构体中的成员,可以单独使用,它的作用与地位相当于普通变量。

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

在定义结构体变量时,可以对它初始化,即赋予初始值。然后可以引用这个变量,例如输出它的成员的值。

  1. 在定义结构体变量时可以对它的成员初始化。初始化列表是用花括号括起来的一些变量,这些变量依次赋给结构体变量中的各成员。注意:是对结构体变量初始化,而不是对结构体类型初始化。可以引用结构体变量中的成员的值,引用方式为结构体变量.成员名("."是成员运算符,它在所有的运算符中优先级最高)
    注意:不能企图通过输出结构体变量名来达到输出结构体变量所有成员的值。
  2. 如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。
  3. 对结构体变量的成员可以像普通变量一样进行各种运算
  4. 同类的结构体变量可以相互赋值
  5. student1=student2;//假设student1和student2已定义为同类型的结构体变量
  6. 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。结构体变量的地址主要用作函数参数,传递结构体变量的地址

猜你喜欢

转载自blog.csdn.net/lijiahao1212/article/details/129982176