1.结构体概念

    • 把相互联系的数据合并到一起;
    • 结构体:在同一个组合项中包含若干个不同类型的数据类型;
    • 类似数据库中的记录;
    • 结构的每一个成员又称为域;
    • 定义结构体类型变量的方法
      • 先定义结构体类型再定义变量名 ```cpp struct student
        { int num;
        char name[20]; char sex; int age;
        float score;
        char addr[30]; }; struct student student1, student2;
    1. - 结构体类型只是一种数据类型,不占内存空间,只有定义结构体类型变量时才开辟内存空间。
    2. **2.结构体变量的定义方法和初始化**
    3. - 定义结构体变量的三种方法:
    4. - 先声明结构体类型再定义变量:
    5. ```cpp
    6. student std1,std2;
    • 在声明同时定义

      struct Student 
      { 
      int num; 
      char name[20];
      char sex; 
      int age; 
      } std1, std2;
      
    • 直接定义结构体类型变量

      struct {
      int num;
      char name[20];
      char sex; 
      int age; 
      } std1, std2;
      
    • 结构体定义的说明
      • 结构体类型的变量在内存中依照其成员的顺序排列,所占内存空间的大小是全体成员所占空间的总和;
      • 在编译时,仅对变量分配空间,不对类型分配空间;
      • 对结构体中各个成员可以单独引用、赋值,其作用与变量等同;

    格式:变量名.成员名

    • 结构体的成员可以是另一个结构体类型

      struct  date
      {  int   month; 
      int   day;  
      int  year;
      };
      struct  student
      {  int   num;   
      char  name[20];  
      struct  date     birthday; 
      };
      
    • 成员名可以与程序中的变量名相同,二者分占不同的内存单元,互不干扰。

    • 结构体变量定义和初始化
      struct Student
      { int num; 
      char name[20]; 
      char sex; 
      int age; 
      } std1 = {10, “wang”, ‘F’, 19};
      student std1 = {10, “wang”, ‘F’, 19};
      

    3.结构体变量的引用

    • 可直接赋值

      std1 = std2;
      
    • 可以直接访问结构体变量的一个成员

      std1.num = 10010;
      
    • 嵌套结构可以利用多个成员运算符

      std1.birthday.month = 10;
      
    • 不能对结构整体进行输入输出运算

      cout<<std1; // 报错!
      
    • 对结构体变量的成员变量可看成普通的变量

      std1.age++;
      
    • 可引用结构体成员变量的地址,也可以引用结构体变量的地址

      cout<<&std1; cout<<&std1.age;
      
    • 结构体变量使用说明

      • 同类型结构体变量之间可直接赋值。这种赋值相当于各个成员的依次赋值。
      • 结构体变量不能直接进行输入输出,它的每个成员能否直接输入输出,取决于成员的类型。
      • 结构体变量可作为函数的参数,函数可以返回结构体的值。当函数的形参与实参为结构体类型的变量时,这种结合方式属于值调用方式,即属于值传递。

    4.结构体数组

    • 每个数组元素都是一个结构体类型的数据
    • 定义

      student std[20];
      
    • 初始化

      student std[] = {{…},{…},…};
      

    5.指向结构体变量的指针

    • 通过指针引用结构体变量的成员

      student std;
      student* p;
      p = &std; 
      ASSERT(p->num==std.num);
      

      批注 2020-08-15 112601.png

      6.指向结构体变量的指针**

    • 用结构体变量和指向结构体变量的指针构成链表

    • 链表应用场合:存储一个集合的元素,但地址不联系。

    7.结构体类型作为函数参数

    • 将结构体变量中的数据传递给另一个函数的三种方法:

      • 用结构体变量名作参数

        void fun(student);
        
      • 用指向结构体变量的指针作参数

        void fun(student*);
        
      • 用结构体变量的引用变量作参数

        void fun(student&);