文章目录

    • 7.4 结构体指针
    • 7.5 结构体嵌套结构体
    • 7.6 结构体做函数参数
    • 7.7 结构体中const使用场景
    • 7.8 结构体案例
    • 案例1
  • 谢谢你的点赞,评论和转发 \( ^ o ^)/~。

7.4 结构体指针

作用:通过指针访问结构体中的成员

  • 利用操作符 - >可以通过结构体指针访问结构体属性
#include <iostream>
#include<string>
using namespace std;
struct Person
{//结构体成员//姓名string name;//身高float  heigth;//体重int weigth;
};
int main52()
{//1.创建个人结构体变量struct  Person  me = { "智多星",180,75 };//int* p = &me;错误//2.通过指针指向结构体变量struct  Person* p = &me;  //将me变量的地址赋予指针p//3.通过指针访问结构体变量中的数据cout << " name : " << p->name << " Heigth :" << p->heigth << " weigth : " << p->weigth << endl;system("pause");return  0;
}

注意:通过结构体指针访问结构体中的属性/成员,需要利用" - >"

7.5 结构体嵌套结构体

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

**例如 **:每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体。

#include<iostream>
#include<string>
using namespace std;//定义学生的结构体
struct student
{//学生结构体成员string  name;int   age;int sore;
};//定义老师的结构体之前要先定义老师的结构体才能引用学生结构体
struct teacher
{//成员列表int id;      //职工编号string  name; //教师姓名 int  age;          //教师年龄struct   student   s1;      //定义学生结构体变量};int main()
{struct teacher   t1;t1.id = 00324;t1.name = " 陈辉";t1.age = 45;t1.s1.name = "廖克志";t1.s1.age = 21;t1.s1.sore = 100;cout << "教师的名字:" << t1.name << "教师的年龄:" << t1.age << "教师编号:"<< t1.id << " 学生名字:" << t1.s1.name << " 学生年龄:" << t1.s1.age << "  学生分数:" << t1.s1.sore << endl;system("pause");return  0;
}

7.6 结构体做函数参数

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

传递方式有两种:

  1. 值传递
  2. 地址传递
#include<iostream>
using namespace std;
#include<string>
//1.创建学生数据类型    学生包括(姓名,年龄,分数)struct Student
{//成员列表//姓名string  name;//年龄int age;//分数int sore;
};
//方法1:值传递
void  printStudent1(struct Student  s)
{s.age = 38;cout << "在值传递函数中 姓名:" << s.name << " 年龄:" << s.age << " 分数:" << s.sore << endl;}//方法2:地址传递
void  printStudent2(struct Student  *p)
{p->age = 38;cout << "在地址传递函数中 姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->sore << endl;}int main()
{//2.通过学生类型创建具体学生//方式1:2.1  struct  Student  s1struct  Student  s1;s1.age = 18;s1.name = "张三";s1.sore = 98;//printStudent1(s1);printStudent2(&s1);cout << "在main函数中 姓名:" << s1.name << " 年龄:" << s1.age << " 分数:" << s1.sore << endl;system("pause");return 0;
}

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

7.7 结构体中const使用场景

作用:用const来防止误操作

#include<iostream>
#include<string>
using namespace std;//定义学生结构体
struct Student
{//结构体成员string name;    //姓名int age;        //年龄int sore;   //分数
};
void  printStudent(const Student* p)
{//p->age = 90;  加入xonst之后,一旦有修改的操作就会报错,可以防止我们的误操作cout << " 姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->sore << endl;
}
//将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本int main()
{//创建结构体变量struct  Student  s = { "张三",30,88 };//通过函数打印结构体变量信息printStudent(&s);cout << " main函数中姓名:" << s.name << " 年龄:" << s.age << " 分数:" << s.sore << endl;system("pause");return 0;
}

7.8 结构体案例

案例1

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

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

#include<iostream>
#include<string>
using namespace std;
#include<ctime>//1.创建老师结构体
struct student
{//学生属性string  name;int age = 0;int sore = 0;
};
//1.创建学生结构体
struct teacher
{string tname;struct  student  ArryStudent[5];};//2.赋值函数
void  FuZhi(struct teacher tArry[], int len)
{string  nameSeed = "ABCDE";for (int i = 0; i < len; i++){tArry[i].tname = "Teacher_";tArry[i].tname += nameSeed[i];for (int j = 0; j < 5; j++){tArry[i].ArryStudent[j].name = "Student_";tArry[i].ArryStudent[j].name += nameSeed[i];int  random = rand() % 61 + 40;    //40~100tArry[i].ArryStudent[j].sore = random;tArry[i].ArryStudent[j].age = 21;}}}void  PrintInfo(struct teacher tArry[], int len)
{for (int i = 0; i < len; i++){cout << " 老师姓名:" << tArry[i].tname << endl;for (int j = 0; j < 5; j++){cout << " \t 学生姓名:" << tArry[i].ArryStudent[j].name << " 考试分数:"<< tArry[i].ArryStudent[j].sore << " 学生年龄:" << tArry[i].ArryStudent[j].age << endl;}}
}int main()
{//随机数种子srand((unsigned int)time(NULL));//1、创建老师和学生结构体struct teacher  ArryTeacher[3];//2.   给结构体赋值int len = sizeof(ArryTeacher) / sizeof(ArryTeacher[0]);FuZhi(ArryTeacher, len);//3.打印输出结构体信息PrintInfo(ArryTeacher, len);system("pause");return 0;
}

案例2

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

{"刘备",23,"男"}
{"关羽",24,"男"}
{"张飞",22,"男"}
{"貂蝉",19,"女"}
{"赵云",20,"男"}
#include<iostream>
#include<string>
using namespace std;//1 定义英雄结构体
struct Hero
{string name;int age;string  sex;
};//3.排序函数
void  SortHero(struct Hero Arr[], int len)
{for (int  i = 0; i < len -1; i++){for (int j = 0; j < len - i - 1; j++){if (Arr[j].age  >  Arr[j+1].age ){struct  Hero  temp;temp = Arr[j];Arr[j] = Arr[j + 1];Arr[j + 1] = temp;}}}
}
//打印函数
void  printHero(struct  Hero  Arr[], int  len)
{for (int i = 0; i < 5; i++){cout << " 姓名:" << Arr[i].name << " 年龄:" << Arr[i].age << " 性别:" << Arr[i].sex << endl;}
}
int main()
{//1.定义英雄结构体//2.创建英雄数组struct Hero  ArryHero[5] ={{"刘备",23,"男"},{"关羽",24,"男"},{"张飞",22,"男"},{"貂蝉",19,"女"},{"赵云",20,"男"},};//3.按照英雄年龄进行排序cout << "排序前结果:" << endl;for (int i = 0; i < 5; i++){cout << " 姓名:" << ArryHero[i].name << " 年龄:" << ArryHero[i].age << " 性别:" << ArryHero[i].sex << endl;}//4.打印输出排序后结果cout << "排序后结果:" << endl;printHero(ArryHero, 5);system("pause");return 0;
}

谢谢你的点赞,评论和转发 ( ^ o ^)/~。

15C++结构体基础知识点(二)相关推荐

  1. 线性表基础实践:实现对员工进行信息管理(结构体基础运用)

    一.线性表定义 线性表 (Linear List) :由同类型 数据元素 构成 有序序列 的线性结构. 主要有 顺序储存结构和 链式储存结构. 两种结构各有优缺点. ①线性表的顺序存储实现: 利用数组 ...

  2. 【HDU】1305 Immediate Decodability(字典树:结构体数组,二维数组,链表/指针)

    一.用的二维数组 #include <iostream> #include <cstring> #include <algorithm> using namespa ...

  3. c语言程序设计 实验十一,C语言实验十一 结构体程序设计(二)

    实验十一结构体程序设计(二) 一.实验目的 1.掌握链表的基本概念与定义方法: 2.掌握链表.共用体的程序设计. 二.实验环境 1.硬件:PII以上计算机: 2.软件:Windows.Visual C ...

  4. 【Struct(结构体)杂谈之二】名不正则言不顺---Struct(结构体)的声明、定义及初始化

    Struct(结构体)的声明.定义及初始化 上一篇里我们讲了为什么我们要引入Struct这个数据类型,我们了解到Struct是一种聚合数据类型,是为了用户描述和解释一些事物的方便而提出的,Struct ...

  5. c语言构造体二维数组,怎么才能把结构体里面的二维数组打印出来?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 萌新一位,学到结构体在做作业,遇到了这个问题.求提示 出现这样的报错:[Error] cannot convert 'char (*)[20]' to ' ...

  6. c语言中二维数组的结构体,怎么才能把结构体里面的二维数组打印出来?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 萌新一位,学到结构体在做作业,遇到了这个问题.求提示 出现这样的报错:[Error] cannot convert 'char (*)[20]' to ' ...

  7. C语言结构体学习(二)

    结构体数组 结构体数组有两种定义方法, (1)第一种就是声明结构体的时候进行定义: Struct 结构体名称{ 结构体成员: }数组名[长度]: (2)第二种就是先声明,但是到后面使用的时候在定义 s ...

  8. C/C++基础知识点(二)

    文章目录 13.C++如何定义常量,常量放在内存的哪个位置? 14.const修饰成员函数的目的是什么? 15.以下几行代码的区别? 16.隐式类型转换 17.new/delete与malloc/fr ...

  9. C语言 结构体基础知识

    什么是结构: 是一种程序员自己设计数据类型,由若干个不同的数据类型组成, 可用于描述一个事物各项数据. 1.设计结构(设计数据类型):// 仅仅是一种数据类型 typedef struct 结构名 { ...

最新文章

  1. Linux进程与线程的区别 详细总结(面试经验总结)
  2. MIT自然语言处理第三讲:概率语言模型
  3. 卷的作用_悄悄告诉你蛋糕卷零失败的秘诀!
  4. python 闭包(closure)
  5. 常用shader固有函数
  6. 流量超过谷歌的Tiktok,在扩张过程中被质疑“偷窃”OBS代码
  7. 卸载各类顽固程序时的六个秘密小技巧
  8. [leetcode] 4. 寻找两个有序数组的中位数
  9. 模型房推荐_艺术生意大利留学,关于费用开销和专业推荐,这些详情要看
  10. 使用pillow简易创建个图形验证码
  11. 对于寨板X99开启AIDA64传感器必须的设置
  12. SSL 1653 数字游戏
  13. 二代测序call indel 总结
  14. 板内板间通信协议及接口(六)RS232 RS485 RS422
  15. 【国科大矩阵论】2021秋季叶世伟矩阵论考试计算题
  16. Modbus Tcp服务端使用说明书
  17. 达到英语欧洲语言C2级的书有,剑桥少儿英语二级书
  18. 计算机电缆参数,计算机电缆的几个参数要求
  19. nginx1.14的安装
  20. 使用nvm管理node

热门文章

  1. 5个高清/4K视频素材网站,免费下载。
  2. java游戏super赛亚人传说,龙珠激斗之赛亚人传说
  3. Altair的铸造模拟工具Inspire Cast软件2022.2版本下载与安装配置教程
  4. Linux中软链接与硬链接的作用、区别、创建、删除
  5. 2020年河南成人高考各科目快速备考方法
  6. Spring框架 -- 开篇搭建脚手架
  7. 软件需求用例如何写?
  8. c语言读取命令行参数,请问C-读取命令行参数怎么读取
  9. flask的前后端交互方式
  10. 基于DJYOS的物联网危险源智能监测平台