计算机考研复试之C语言(第九章)

9.1 定义和使用结构体变量

  • 1、自己建立结构体类型

    • (1)概述
      C语言允许用户自己建立由不同类型数据组成的组合型额数据结构,它称为结构体(structre)。
    • (2)结构体类型的声明
    struct  结构体名
    {
       成员列表
    };
    

    其主要组成为:
    ①关键字struct,不能省略;
    ②结构体名,由用户指定,又叫结构体标记;
    ③成员列表,可以是另外一个结构体类型。

  • 2、定义结构体类型变量

    • (1)先声明结构体类型,再定义该类型的变量
      struct 结构体名 结构体变量名1,结构体变量名2,…,结构体变量名n;
    • (2)在声明类型的同时定义变量
    struct  结构体名
    {
       成员列表
    }变量名列表;
    
    • (3)不指定类型名而直接定义结构体类型变量
    struct
    {
       成员列表
    }变量名列表;
    

    无名的结构体类型,显然不能再以此结构体类型去定义其他变量,这种方式用得不多。

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

    • (1)结构体变量初始化
      ①在定义结构体变量时对所有元素进行初始化,一般形式如下:
      在这里插入图片描述
      ②在定义结构体变量时对部分元素进行初始化,一般形式如下:
      在这里插入图片描述
    • (2)结构体变量的引用
      ①结构体变量的一般形式如下:
      结构体变量名.成员名
      ②结构体变量中的成员又是一个结构体变量,则为多级引用,例如:
      在这里插入图片描述
    • (3)结构体变量的其他用法
      ①结构体变量的成员可以像普通变量一样进行各种运算;
      ②同类的结构体变量可以互相赋值;
      ③可以引用结构体变量成员的地址,也可以引用结构体变量的地址。

9.2 使用结构体数组

  • 1、定义结构体数组的两种形式

    • (1)声明类型的同时定义结构体数组
    struct 结构体名{
      成员列表
    }数组名[数组长度];
    
    
    • (2)先声明一个结构体类型,然后再用此类型定义结构体数组:
      结构体类型 数组名[数组长度];
  • 2、对结构体数组的初始化
    在定义数组的后面加上“={初值表列};”即可。

9.3 结构体指针

结构体指针是指指向结构体变量的指针,一个结构体变量的起始地址是指这个结构体变量的指针。

  • 1、指向结构体变量的指针
    指向结构体对象的指针变量既可指向结构体变量,也可指向结构体数组中的元素。指针变量的基类型必须与结构体变量的类型相同。
    设结构体指针p指向结构体变量stu,num是其成员,则以下三种用法等价:
    ①stu.成员名(如stu.num);
    ②(*p).成员名(如(*p).num);
    ③p->成员名(如p->num)。
  • 2、指向结构体数组的指针
    可以用指针变量指向结构体数组的元素。设有指向结构体数组的指针p,则:
    ①假设p的初值为stu,即指向stu的第一个元素,p+1后,p就指向下一个元素;
    ②p应该指向指定的结构体类型的对象,而不是指向结构体数组元素中的某一成员。
  • 3、用结构体变量指针作函数参数
    结构体作函数参数分类有三种:
    ①用结构体变量的成员作参数
    ②用结构体变量作实参
    ③用指向结构体变量(或数组元素)的指针作实参

9.4 用指针处理链表

  • 1、定义
    链表是一种常见的重要的数据结构。不同于数组的固定长度,链表是根据需要开辟内存单元,它是动态地进行存储分配的一种结构。
  • 2、结构
    简单的单向链表结构如下图所示,链表中每一个元素称为结点,每个结点都应包括两个部分:
    ①用户需要用的实际数据;
    ②下一个结点的地址。
    在这里插入图片描述
  • 3、建立链表
    结构体变量是建立链表最适合的方法,用部分成员来存放用户实际数据、用指针类型成员来存放下一个结点的位置,设有以下结构体类型:
struct Student
{
  int num;
  float score;
  struct Student *next;  //next是指针变量,指向结构体变量
}

则建立的链表如下图所示:
在这里插入图片描述

  • 4、输出链表
    链表的输出N-S流程图如图9-3所示。
    在这里插入图片描述

9.5 共用体类型

  • 1、什么是共用体类型

    • (1)基本概念
      有时想用同一段内存单元存放不同类型的变量。在存放变量时会使用覆盖技术,即新存入的变量会覆盖前一个数据,前面一个数据就不会起作用,这种使几个不同的变量共享同一段内存的结构,称为“共用体”类型的结构。
    • (2)定义公用体
      定义公用体类型变量的一般形式为
    union 共用体名
    {
      成员列表
    }变量列表;
    
    • (3)与结构体的区别
      结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元;而共用体变量所占的内存长度等于最长的成员的长度。
  • 2、引用公用体变量的方式
    只有先定义了公用体变量才能引用它,引用方式与结构体变量相同,但是不能引用共用体变量,而只能引用共用体变量中的成员。

  • 3、共用体类型数据的特点

    • (1)同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一个成员,而不是同时存放几个。
    • (2)可以对共用体变量初始化,但初始化表中只能有一个常量。
    • (3)共用体变量中起作用的成员是最后一次被赋值的成员,在对共用体变量中的一个成员赋值后,原有变量存储单元中的值就被取代。
    • (4)共用体变量的地址和它的各成员的地址都是同一地址。
    • (5)不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。
    • (6)C99允许用共用体变量作为函数参数。

9.6 使用枚举类型

如果一个变量只有几种可能的值,则可以定义为枚举(enumeration)类型,“枚举”是指把可能的值一一列举出来,变量的值只限于列举出来的值地范围内。

  • 1、声明枚举类型
    声明枚举类型的一般形式为:
    enum 枚举名{枚举元素列表};
    说明:
    C语言将枚举类型元素按常量处理,按顺序默认它们的值为0、1、2、3…,因此枚举元素可以进行判断比较。
  • 2、定义枚举变量
    • (1)若已声明了枚举变量,则定义枚举变量的一般形式为:
      enum 枚举名 枚举变量1,枚举变量2,…
    • (2)若没有声明枚举变量,则定义枚举变量的一般形式为:
      enum{枚举变量1,枚举变量2,…}枚举常量1,枚举常量2…

9.7 用typedef声明新类型名

  • 1、简单地用一个新的类型名代替原有的类型名
    简单地使用一个新类型名代替原有类型名后,两个类型名的作用是等价的,一般形式为:
    typedef旧类型名 新类型名;

  • 2、命名一个简单地类型名代替复杂的类型表示方法

    • (1)命名一个新的类型名代表结构体类型
    typedef struct
    {
      int month;
      int day;
      int year;
    }Date
    Date birthday;  //定义结构体类型变量birthday,前面不需要加关键字struct
    
    • (2)命名一个新的类型名代表数组类型
      typedef int Num[100]; //声明Num为整型数组类型名
      Num a; //定义a为整型数组名,它有100个元素
    • (3)命名一个新的类型名代表指针类型
      typedef char *String; //声明String为字符指针类型
      String p,s[10]; //定义p为字符指针变量,s为字符指针组
    • (4)命名一个新的类型名代表指向函数的指针类型
      typedef int(* Pointer)(); //声明为Pointer为指向函数的指针类型,该函数返回整型值
      Pointer p1,p2; //p1,p2为Pointer类型的指针变量
原创文章 60 获赞 56 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_40605573/article/details/106003243