C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例

目录

一、简单介绍

二、结构体定义和使用

三、结构体数组

四、 结构体指针

五、 结构体嵌套结构体

六、结构体做函数参数

七、结构体中 const 使用场景

八、结构体案例 (打印出老师数据以及老师所带的学生数据)

九、结构体案例 (打印出将数组中的英雄按照年龄进行升序冒泡排序后的结果)


一、简单介绍

C++ 开发的一些知识整理,方便后期遇到类似的问题,能够及时查阅使用。

本节介绍,结构体,结构体属于用户自定义的数据类型,允许用户存储不同的数据类型,包括结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例以及注意事项。如果有不足之处,欢迎指出,或者你有更好的方法,欢迎留言。

二、结构体定义和使用

形式:`struct 结构体名 { 结构体成员列表 };`

通过结构体创建变量的方式有三种:

  • struct 结构体名 变量名
  • struct 结构体名 变量名 = { 成员1值 , 成员2值...}
  • 定义结构体时顺便创建变量

说明:

  • 定义结构体时的关键字是struct,不可省略
  • 创建结构体变量时,关键字struct可以省略
  • 结构体变量利用操作符 ''.''  访问成员

代码:

#include<iostream>
using namespace std;//结构体定义
struct student
{//成员列表string name;  //姓名int age;      //年龄int score;    //分数
}stu3; //结构体变量创建方式3 int main() {//结构体变量创建方式1struct student stu1; //struct 关键字可以省略stu1.name = "张三";stu1.age = 18;stu1.score = 100;cout << "姓名:" << stu1.name << " 年龄:" << stu1.age << " 分数:" << stu1.score << endl;//结构体变量创建方式2struct student stu2 = { "李四",19,60 };cout << "姓名:" << stu2.name << " 年龄:" << stu2.age << " 分数:" << stu2.score << endl;stu3.name = "王五";stu3.age = 18;stu3.score = 80;cout << "姓名:" << stu3.name << " 年龄:" << stu3.age << " 分数:" << stu3.score << endl;system("pause");return 0;
}

三、结构体数组

可以将自定义的结构体放入到数组中,以方便维护

形式:` struct  结构体名 数组名[元素个数] = {  {} , {} , ... {} }`

代码:

#include<iostream>
using namespace std;//结构体定义
struct student
{//成员列表string name;  //姓名int age;      //年龄int score;    //分数
};int main() {//结构体数组struct student arr[3] ={{"张三",18,80 },{"李四",19,60 },{"王五",20,70 }};for (int i = 0; i < 3; i++){cout << "姓名:" << arr[i].name << " 年龄:" << arr[i].age << " 分数:" << arr[i].score << endl;}system("pause");return 0;
}

四、 结构体指针

可以通过指针访问结构体中的成员

说明:

  • 结构体指针可以通过 -> 操作符 来访问结构体中的成员

代码:

#include<iostream>
using namespace std;//结构体定义
struct student
{//成员列表string name;  //姓名int age;      //年龄int score;    //分数
};int main() {struct student stu = { "张三",18,100, };struct student* p = &stu;p->score = 80; //指针通过 -> 操作符可以访问成员cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;system("pause");return 0;
}

五、 结构体嵌套结构体

结构体中的成员可以是另一个结构体

说明:

  • 在结构体中可以定义另一个结构体作为成员,用来解决实际问题

代码:

#include<iostream>
using namespace std;//学生结构体定义
struct student
{//成员列表string name;  //姓名int age;      //年龄int score;    //分数
};//教师结构体定义
struct teacher
{//成员列表int id; //职工编号string name;  //教师姓名int age;   //教师年龄struct student stu; //子结构体 学生
};int main() {struct teacher t1;t1.id = 10000;t1.name = "老王";t1.age = 40;t1.stu.name = "张三";t1.stu.age = 18;t1.stu.score = 100;cout << "教师 职工编号: " << t1.id << " 姓名: " << t1.name << " 年龄: " << t1.age << endl;cout << "辅导学员 姓名: " << t1.stu.name << " 年龄:" << t1.stu.age << " 考试分数: " << t1.stu.score << endl;system("pause");return 0;
}

六、结构体做函数参数

将结构体作为参数向函数中传递

传递方式有两种:

  • 值传递
  • 地址传递

说明:

  • 如果不想修改主函数中的数据,用值传递,反之用地址传递

代码:

#include<iostream>
using namespace std;//学生结构体定义
struct student
{//成员列表string name;  //姓名int age;      //年龄int score;    //分数
};//值传递
void printStudent(student stu)
{stu.age = 28;cout << "子函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;
}//地址传递
void printStudent2(student* stu)
{stu->age = 28;cout << "子函数中 姓名:" << stu->name << " 年龄: " << stu->age << " 分数:" << stu->score << endl;
}int main() {student stu = { "张三",18,100 };//值传递cout << "值传递:" << endl;printStudent(stu);cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;cout << endl;//地址传递cout << "地址传递:" << endl;printStudent2(&stu);cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;system("pause");return 0;
}

七、结构体中 const 使用场景

可以用const来防止误操作

代码:

#include<iostream>
using namespace std;//学生结构体定义
struct student
{//成员列表string name;  //姓名int age;      //年龄int score;    //分数
};//const使用场景
void printStudent(const student* stu) //加const防止函数体中的误操作
{//stu->age = 100; //操作失败,因为加了const修饰cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl;}int main() {student stu = { "张三",18,100 };printStudent(&stu);system("pause");return 0;
}

八、结构体案例 (打印出老师数据以及老师所带的学生数据)

描述:学校正在做毕设项目,每名老师带领5个学生,总共有3名老师,需求如下

  • 设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员
  • 学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值
  • 最终打印出老师数据以及老师所带的学生数据。

代码:

#include<iostream>
using namespace std;struct Student
{string name;int score;
};
struct Teacher
{string name;Student sArray[5];
};void allocateSpace(Teacher tArray[], int len)
{string tName = "教师";string sName = "学生";string nameSeed = "ABCDE";for (int i = 0; i < len; i++){tArray[i].name = tName + nameSeed[i];for (int j = 0; j < 5; j++){tArray[i].sArray[j].name = sName + nameSeed[j];tArray[i].sArray[j].score = rand() % 61 + 40;}}
}void printTeachers(Teacher tArray[], int len)
{for (int i = 0; i < len; i++){cout << tArray[i].name << endl;for (int j = 0; j < 5; j++){cout << "\t姓名:" << tArray[i].sArray[j].name << " 分数:" << tArray[i].sArray[j].score << endl;}}
}int main() {srand((unsigned int)time(NULL)); //随机数种子 头文件 #include <ctime>Teacher tArray[3]; //老师数组int len = sizeof(tArray) / sizeof(Teacher);allocateSpace(tArray, len); //创建数据printTeachers(tArray, len); //打印数据system("pause");return 0;
}

九、结构体案例 (打印出将数组中的英雄按照年龄进行升序冒泡排序后的结果)

描述:设计一个英雄的结构体,包括成员姓名,年龄,性别;创建结构体数组,数组中存放5名英雄。通过冒泡排序的算法,将数组中的英雄按照年龄进行升序排序,最终打印排序后的结果。

五名英雄信息如下:
        {"刘备",23,"男"},
        {"关羽",22,"男"},
        {"张飞",20,"男"},
        {"赵云",21,"男"},
        {"貂蝉",19,"女"},
代码:

#include<iostream>
using namespace std;//英雄结构体
struct hero
{string name;int age;string sex;
};
//冒泡排序
void bubbleSort(hero arr[], int len)
{for (int i = 0; i < len - 1; i++){for (int j = 0; j < len - 1 - i; j++){if (arr[j].age > arr[j + 1].age){hero temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}
//打印数组
void printHeros(hero arr[], int len)
{for (int i = 0; i < len; i++){cout << "\t姓名: " << arr[i].name << " 性别: " << arr[i].sex << " 年龄: " << arr[i].age << endl;}
}int main() {struct hero arr[5] ={{"刘备",23,"男"},{"关羽",22,"男"},{"张飞",20,"男"},{"赵云",21,"男"},{"貂蝉",19,"女"},};int len = sizeof(arr) / sizeof(hero); //获取数组元素个数cout << "未排序前:" << endl;printHeros(arr, len); //打印cout << "排序后:" << endl;bubbleSort(arr, len); //排序printHeros(arr, len); //打印system("pause");return 0;
}

C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例相关推荐

  1. c++结构体总结(结构体定义,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体中 const使用场景)

    看完b站黑马程序员之后的借鉴和笔记 1.什么是结构体,有什么作用? 在C/C++中,结构体是用户定义的数据类型.它可以把几种不同类型的数据项集合成结构体这样一个单一类型. 2. 结构体定义和使用 #i ...

  2. c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const

    十二.结构体 (1)结构体定义和使用 基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型. 参考视频:https://www.bilibili.com/video/BV1et411b ...

  3. C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用)

    C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用) 目录 C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数, ...

  4. 结构体05:结构体做函数参数

    #include<iostream> #include<string> using namespace std;//定义结构体 struct Student{string na ...

  5. 【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体 const

    文章目录 1. 定义和使用 2. 结构体数组 3. 结构体指针 4. 结构体嵌套结构体 5. 结构体做函数参数 6. 结构体 const 1. 定义和使用 结构体属于用户自定义的数据类型,允许用户存储 ...

  6. C++结构体 结构体定义和使用、结构体数组、结构体指针、结构体嵌套结构体、结构体做函数参数

    C++结构体 第二章 C++结构体 1.结构体定义和使用 语法:struct 结构体名 { 结构体成员列表 }: 通过结构体创建变量的方式有三种: struct 结构体名 变量名 struct 结构体 ...

  7. 阿里云【名师课堂】Java零基础入门24 ~ 26:方法的定义与使用

    阿里云[名师课堂]Java零基础入门24 ~ 26:方法的定义与使用 24:方法的基本定义 无返回值无参数 无返回值有参数 有返回值有参数 25:方法重载(重点) 26:方法递归调用 24:方法的基本 ...

  8. Python基础day05【函数(函数传参的两种形式、函数形参)、拆包、引用、可变与不可变类型、引用做函数参数注意点】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]    目录 0.复习 1.函数传参的两种形式[掌握] 2.函数形参 2.1.缺省参数(默认参数) ...

  9. C++_结构体中const使用场景_结构体_毕业设计案例_使用结构体数组_随机数种子---C++语言工作笔记027

    然后我们再看const符号,在结构体中的应用 首先我们新建一个结构体.student 然后定义一个结构体变量,并初始化 然后我们再写个方法,去打印这个结构体变量 可以看到我们用的是传值

最新文章

  1. 跨平台工具、组件和框架的汇总
  2. linux主机间复制文件
  3. python语言中,对于cursor的查询明明有结果,为什么print cursor.rowcount结果为-1?
  4. MFC 多文档中同时打开多个文档
  5. 表中的数据导出为insert语句的简单方法
  6. 助理来也胡一川:用数据驱动打造智能行业助理(技术+业务)
  7. MVVM实践中的Command与CommandParameter的使用
  8. B. Trouble Sort Codeforces Round #648 (Div. 2)
  9. 单列表_使用Excel中的quot;记录单quot;功能快速录入数据
  10. 课外知识----浏览器存储技术
  11. 现代软件工程讲义 6 用户调研
  12. ASP.net(C#)]用DataSet进入对数据源的插入数据、更新数据及刪除数据
  13. SAP License:SAP入门教材思考
  14. ODrive踩坑(四)AS5047P-SPI绝对值磁编码器,不需每次上电校准无刷电机,直接上电可用
  15. 华为云服务器测试并用docker快速搭建2048网站
  16. 《决战大数据》读书笔记(二) cookie识别用户行为已经过时
  17. C语言 计算BMI值,建议体重
  18. 一加 Ace2是直屏还是曲面屏 一加 Ace2有IP68级防水吗
  19. 【点的定位】Save the Students! UVALive - 5984
  20. 水生生物学类毕业论文文献包含哪些?

热门文章

  1. CISCO2600路由器入门3
  2. laravel在线教育开发__四级联动(地区选择)
  3. 飞冰 - ICE Design Pro 使用指南
  4. C语言候老师,两本留言册背后的C语言老师
  5. 不可不知的量化因子模型选股策略
  6. 思科网络设备常用命令
  7. 写给女儿高中编程课老师的一封信
  8. mysql5.7.20如何卸载干净再重装
  9. 软工视频到底在讲什么?
  10. 最长公共子序列的问题