暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

C++基础学习:第十一节-结构体基础

Cpp入门到精通 2024-01-19
170

点击蓝字 关注我们


c++基础学习

第十节 结构体基础 


      结构体(Struct)是一种用户自定义的数据类型,允许将不同类型的数据组合在一起,形成一个单一的数据结构。结构体中的成员可以是各种基本数据类型(如整数、浮点数、字符等),也可以是其他结构体或数组。

    struct 结构体名
    {
    变量一;
    变量二;
    ......;
    };

    接下来定义一个学生结构体:

      #include<iostream>
      using namespace std;
      #include<string>//字符串头文件
      struct students//定义结构体
      {
      string name;
      int age;
      string sex;
      };


      int main()
      {
      students S1;//创建结构体变量
      S1.name = "Rose";// 初始化结构体成员第一种方式
      S1.age = 20;
      S1.sex = "女";
      cout << "S1:" << "\t" << "姓名:" << S1.name <<"\t"
      << "年龄:" << S1.age <<"\t" << "性别:" << S1.sex << endl;
      students S2 = { "XDOne",21,"男" };//第二种方式:必须按照定义时的顺序初始化
      cout << "S2:" << "\t" << "姓名:" << S2.name << "\t"
      << "年龄:" << S2.age << "\t" << "性别:" << S2.sex << endl;
      system("pause");
      return 0;
      }

      结果如下:

        S1:     姓名:Rose      年龄:20        性别:女
        S2: 姓名:XDOne 年龄:21 性别:男

        students是一个结构体,包含了姓名(name)、年龄(age)和性别(sex)这三个成员。在 main 函数中,我们创建了两个 students 类型的结构体变量,分别为 S1 和 S2,并通过点运算符(.)访问和修改结构体的成员。

        结构体数组

        结构体数组允许将相关的数据项组织在一起,形成一个更为结构化的数据集。这对于表示一组相似对象(如学生、员工)的信息是非常有用的。

          #include<iostream>
          using namespace std;
          #include<string>//字符串头文件
          struct students//定义结构体
          {
          string name;
          int age;
          string sex;
          };


          int main()
          {
          students S[3] = {
          {"Rose",20,"女"},
          {"XDOne",21,"男"},
          {"Mily",23,"女"}
          };
          for (int i=0; i <3; i++)
          {
          cout << "S" << i << ":" << "\t" << "姓名:" << S[i].name << "\t"
          << "年龄:" << S[i].age << "\t"
          << "性别:" << S[i].sex << endl;
          }
          system("pause");
          return 0;
          }

          结果如下

            S0:     姓名:Rose      年龄:20        性别:女
            S1: 姓名:XDOne 年龄:21 性别:男
            S2: 姓名:Mily 年龄:23 性别:女

            结构体数组通过索引方式存储数据,这使得可以通过循环轻松遍历数组中的元素。这对于处理大量数据或实现搜索算法等操作很方便。



            结构体指针

            结构体指针是指向结构体变量的指针,它可以用于操作结构体的成员,以及通过动态内存分配创建和访问结构体对象。

              #include<iostream>
              using namespace std;
              #include<string>//字符串头文件
              struct Person//定义结构体
              {
              string name;
              int age;
              int telephone;
              };
              int main()
              {
              Person p1 = { "Rose",20,14138 }; // 定义结构体变量
              Person* ptrPerson = &p1;
              cout << "p1:" << "\t" << "姓名:" << ptrPerson->name << "\t"
              << "年龄:" << ptrPerson->age << "\t"
              << "电话号码:" << ptrPerson->telephone << endl;
              system("pause");
              return 0;
              }

              结果如下

                p1:     姓名:Rose      年龄:20        电话号码:14138

                结构体指针通过箭头运算符 (->) 来访问结构体成员,这相当于通过指针解引用并访问成员。在动态分配内存时,可以使用 new 运算符创建结构体对象,然后通过指针访问和操作其成员,最后使用 delete 释放内存。

                  #include<iostream>
                  using namespace std;
                  #include<string>//字符串头文件
                  struct Person//定义结构体
                  {
                  string name;
                  int age;
                  int telephone;
                  };
                  int main()
                  {
                  Person* ptrPerson = new Person;//动态分配结构体对象
                  ptrPerson->name = "Mily"; // 使用指针访问结构体成员并赋值
                  ptrPerson->age = 23;
                  ptrPerson->telephone = 16158;
                  // 输出结构体成员
                  cout << "p1:" << "\t" << "姓名:" << ptrPerson->name << "\t"
                  << "年龄:" << ptrPerson->age << "\t"
                  << "电话号码:" << ptrPerson->telephone << endl;
                  delete ptrPerson;// 释放动态分配的内存
                  system("pause");
                  return 0;
                  }
                  结果如下:
                    p1:     姓名:Mily      年龄:23        电话号码:16158

                    结构体指针的优点

                    结构体指针相对于普通结构体有一些优点,尤其在涉及到动态内存分配、传递和操作结构体的情况下。


                    动态内存分配:结构体指针允许在运行时动态分配内存,从而创建动态大小的结构体对象。这使得在程序执行期间根据需要创建和释放结构体对象成为可能。代码如上个例子。


                    动态结构体数组:结构体指针使得创建动态大小的结构体数组变得容易。通过动态分配内存,并使用指针来访问数组中的不同元素,可以在运行时灵活地管理数组的大小。


                    传递结构体:通过传递结构体指针,而不是整个结构体,可以避免在函数调用中复制整个结构体的开销,提高程序的效率。

                      #include<iostream>
                      using namespace std;
                      #include<string>//字符串头文件
                      struct Person//定义结构体
                      {
                      string name;
                      int age;
                      int telephone;
                      };
                      void showPerson(const Person*ptrPerson)//使用结构体指针传递结构体
                      {
                      cout << "p1:" << "\t" << "姓名:" << ptrPerson->name << "\t"
                      << "年龄:" << ptrPerson->age << "\t"
                      << "电话号码:" << ptrPerson->telephone << endl;
                      }
                      int main()
                      {
                      Person p1 = { "Rose",20,14138 };
                      showPerson(&p1);// 通过指针传递结构体
                      system("pause");
                      return 0;
                      }

                      在这个例子中,在函数参数中使用 const
                      修饰指针,表示指针指向的内容是常量,不可修改。我们希望声明一个带有参数的函数,并明确表明该函数不会修改传入的参数的值。这时可以使用 const
                      修饰函数的参数。在函数声明和定义中,将参数声明为 const
                      表示该参数是只读的,即函数内部不能修改这个参数的值。这样的声明和定义使得函数更安全,因为它确保了在函数内部不会无意间修改传入的参数。

                      结果如下:

                        p1:     姓名:Rose      年龄:20        电话号码:14138

                        typedef关键字

                        用来为数据类型定义别名的关键字。通过 typedef,可以为已有的数据类型创建一个新的名称,提高代码的可移植性。

                          typedef 已存在类型名 别名

                          上述例子中使用typedef Person student,就可在主函数中初始化一个student类型,实质上就是Person。



                          END

                          往期推荐

                          C++基础学习:第十节-指针与函数

                          C++基础学习:第九节-指针与数组

                          C++基础学习:第八节-指针基础

                          C++基础学习:第七节-数组

                          文章转载自Cpp入门到精通,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论