C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例
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 使用场景/结构体案例相关推荐
- c++结构体总结(结构体定义,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体中 const使用场景)
看完b站黑马程序员之后的借鉴和笔记 1.什么是结构体,有什么作用? 在C/C++中,结构体是用户定义的数据类型.它可以把几种不同类型的数据项集合成结构体这样一个单一类型. 2. 结构体定义和使用 #i ...
- c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const
十二.结构体 (1)结构体定义和使用 基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型. 参考视频:https://www.bilibili.com/video/BV1et411b ...
- C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用)
C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用) 目录 C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数, ...
- 结构体05:结构体做函数参数
#include<iostream> #include<string> using namespace std;//定义结构体 struct Student{string na ...
- 【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体 const
文章目录 1. 定义和使用 2. 结构体数组 3. 结构体指针 4. 结构体嵌套结构体 5. 结构体做函数参数 6. 结构体 const 1. 定义和使用 结构体属于用户自定义的数据类型,允许用户存储 ...
- C++结构体 结构体定义和使用、结构体数组、结构体指针、结构体嵌套结构体、结构体做函数参数
C++结构体 第二章 C++结构体 1.结构体定义和使用 语法:struct 结构体名 { 结构体成员列表 }: 通过结构体创建变量的方式有三种: struct 结构体名 变量名 struct 结构体 ...
- 阿里云【名师课堂】Java零基础入门24 ~ 26:方法的定义与使用
阿里云[名师课堂]Java零基础入门24 ~ 26:方法的定义与使用 24:方法的基本定义 无返回值无参数 无返回值有参数 有返回值有参数 25:方法重载(重点) 26:方法递归调用 24:方法的基本 ...
- Python基础day05【函数(函数传参的两种形式、函数形参)、拆包、引用、可变与不可变类型、引用做函数参数注意点】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] 目录 0.复习 1.函数传参的两种形式[掌握] 2.函数形参 2.1.缺省参数(默认参数) ...
- C++_结构体中const使用场景_结构体_毕业设计案例_使用结构体数组_随机数种子---C++语言工作笔记027
然后我们再看const符号,在结构体中的应用 首先我们新建一个结构体.student 然后定义一个结构体变量,并初始化 然后我们再写个方法,去打印这个结构体变量 可以看到我们用的是传值
最新文章
- 跨平台工具、组件和框架的汇总
- linux主机间复制文件
- python语言中,对于cursor的查询明明有结果,为什么print cursor.rowcount结果为-1?
- MFC 多文档中同时打开多个文档
- 表中的数据导出为insert语句的简单方法
- 助理来也胡一川:用数据驱动打造智能行业助理(技术+业务)
- MVVM实践中的Command与CommandParameter的使用
- B. Trouble Sort Codeforces Round #648 (Div. 2)
- 单列表_使用Excel中的quot;记录单quot;功能快速录入数据
- 课外知识----浏览器存储技术
- 现代软件工程讲义 6 用户调研
- ASP.net(C#)]用DataSet进入对数据源的插入数据、更新数据及刪除数据
- SAP License:SAP入门教材思考
- ODrive踩坑(四)AS5047P-SPI绝对值磁编码器,不需每次上电校准无刷电机,直接上电可用
- 华为云服务器测试并用docker快速搭建2048网站
- 《决战大数据》读书笔记(二) cookie识别用户行为已经过时
- C语言 计算BMI值,建议体重
- 一加 Ace2是直屏还是曲面屏 一加 Ace2有IP68级防水吗
- 【点的定位】Save the Students! UVALive - 5984
- 水生生物学类毕业论文文献包含哪些?