• 【C++基础】13. 结构体


    • 数组与结构体:C/C++ 数组允许定义可存储相同类型数据项的变量。而结构体是 C++ 中另一种用户自定义的可用的数据类型,它允许我们存储不同类型的数据项。

    【 1. 结构体的定义 】

    • 结构体定义的一般形式:
      • type_name 是结构体类型的名称,
      • member_type1 member_name1 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。
      • 在结构定义的末尾,最后一个分号之前, 我们可以在定义完结构体后直接定义一个或多个结构变量,这是可选的。
    struct type_name
    {
    member_type1 member_name1;
    member_type2 member_name2;
    member_type3 member_name3;
    .
    .
    } object_names;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.1 定义方式1 - 单独定义类型和变量

    • 实例:声明一个结构体类型 Books,变量为 book1、book2。
    struct Books
    {
       char  title[50];
       char  author[50];
       char  subject[100];
       int   book_id;
    };
    
    Books book1,book2;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.2 定义方式2 - 同时定义类型和变量

    • 实例:声明一个结构体类型 Books,变量为 book1、book2。
    struct Books
    {
       char  title[50];
       char  author[50];
       char  subject[100];
       int   book_id;
    } book1,book2;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.3 定义方式3 - typedef 定义 - 保留结构体类型名

    • 利用 typedef 为 所定义的结构体类型 Books 起一个别名 MyBooks。
    typedef struct Books
    {
       char  title[50];
       char  author[50];
       char  subject[100];
       int   book_id;
    }MyBooks;
    
    MyBooks Book1, Book2;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.4 定义方式4 - typedef 定义 - 省略结构体类型名

    typedef struct
    {
       char  title[50];
       char  author[50];
       char  subject[100];
       int   book_id;
    }MyBooks;
    
    MyBooks Book1, Book2;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    【 2. 结构体成员的访问 】

    • 使用成员访问运算符即小数点 . 访问结构体变量的成员。
    • 实例:定义结构体 Books 及其两个结构体变量 Book1 和 Book2,对两个结构体变量的成员进行赋值,最后输出信息。
    #include 
    #include 
    
    using namespace std;
    
    // 声明一个结构体类型 Books 
    struct Books
    {
       char  title[50];
       char  author[50];
       char  subject[100];
       int   book_id;
    };
    
    int main( )
    {
       Books Book1;        // 定义结构体类型 Books 的变量 Book1
       Books Book2;        // 定义结构体类型 Books 的变量 Book2
    
       // Book1 详述
       strcpy( Book1.title, "C++ 教程");
       strcpy( Book1.author, "Nowcoder"); 
       strcpy( Book1.subject, "编程语言");
       Book1.book_id = 12345;
    
       // Book2 详述
       strcpy( Book2.title, "CSS 教程");
       strcpy( Book2.author, "Nowcoder");
       strcpy( Book2.subject, "前端技术");
       Book2.book_id = 12346;
    
       // 输出 Book1 信息
       cout << "第一本书标题 : " << Book1.title <<endl;
       cout << "第一本书作者 : " << Book1.author <<endl;
       cout << "第一本书类目 : " << Book1.subject <<endl;
       cout << "第一本书 ID : " << Book1.book_id <<endl;
    
       // 输出 Book2 信息
       cout << "第二本书标题 : " << Book2.title <<endl;
       cout << "第二本书作者 : " << Book2.author <<endl;
       cout << "第二本书类目 : " << Book2.subject <<endl;
       cout << "第二本书 ID : " << Book2.book_id <<endl;
    
       return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    在这里插入图片描述

    【 3. 结构体变量的声明 】

    • 在多个文件中调用结构体变量时,需要在一个 .h 文件中定义该结构体,再在 需要调用的 cpp 源文件中包含上述 .h 文件并 定义结构体变量,最后再在.h 文件中通过 extern 声明该结构体变量。
    //.cpp文件
    #include 
    #include "test.h"
    using namespace std;
    lidar BenewakeLidar;
    
    int main()
    {
    	BenewakeLidar.AMP = 123;
    	cout << BenewakeLidar.AMP;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    //.h文件
    #ifndef TEST_H
    #define TEST_H
    
    typedef struct
    {
    	int Dist;
    	int AMP;
    	int tem;
    	bool RecieveFlag;
    }lidar;
    
    extern lidar BenewakeLidar;
    
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    【 4. 指向结构体的指针 】

    • 结构体指针的一般定义形式:
    struct Books *struct_pointer; // 创建结构体指针struct_pointer
    struct_pointer = &Book1;      // 结构体指针指向结构体变量Books1
    
    • 1
    • 2
    • 利用 -> 运算符,通过结构体指针访问结构体成员。
    struct_pointer->title;
    
    • 1
    • 实例
    #include 
    #include 
    
    using namespace std;
    void printBook( struct Books *book );
    
    struct Books
    {
       char  title[50];
       char  author[50];
       char  subject[100];
       int   book_id;
    };
    
    int main( )
    {
       Books Book1;        // 定义结构体类型 Books 的变量 Book1
       Books Book2;        // 定义结构体类型 Books 的变量 Book2
    
        // Book1 详述
       strcpy( Book1.title, "C++ 教程");
       strcpy( Book1.author, "Nowcoder"); 
       strcpy( Book1.subject, "编程语言");
       Book1.book_id = 12345;
    
       // Book2 详述
       strcpy( Book2.title, "CSS 教程");
       strcpy( Book2.author, "Nowcoder");
       strcpy( Book2.subject, "前端技术");
       Book2.book_id = 12346;
    
       // 通过传 Book1 的地址来输出 Book1 信息
       printBook( &Book1 );
    
       // 通过传 Book2 的地址来输出 Book2 信息
       printBook( &Book2 );
    
       return 0;
    }
    // 该函数以结构指针作为参数
    void printBook( struct Books *book )
    {
       cout << "书标题  : " << book->title <<endl;
       cout << "书作者 : " << book->author <<endl;
       cout << "书类目 : " << book->subject <<endl;
       cout << "书 ID : " << book->book_id <<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    在这里插入图片描述

  • 相关阅读:
    后端SpringBoot+前端Vue前后端分离的项目(二)
    Cargo 教程
    ModuleNotFoundError: No module named ‘transformers.modeling_bert‘解决方案
    浅析哈希源码
    哈工大李治军老师操作系统笔记【12】:CPU调度策略(Learning OS Concepts By Coding Them !)
    计算机毕设(附源码)JAVA-SSM加油站管理信息系统
    Java设计模式之外观模式
    简单实现spring的set依赖注入
    [笔记]RestController统一返回结果格式
    Vue 3中的reactive:响应式状态的全面管理
  • 原文地址:https://blog.csdn.net/qq_44431690/article/details/133860481