【c++】结构体

news/2024/11/2 8:34:59/

文章目录

  • 结构体的定义和使用
  • 结构体数组
  • 结构体指针
  • 结构体嵌套结构体
  • 结构体做函数参数
  • 结构体中const使用场景


结构体的定义和使用

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。

结构体定义语法:struct 结构体名 {结构体成员列表};

通过结构体创建变量的方式有三种:
1、struct 结构体名 变量名;
2、struct 结构体名 变量名={成员1值,成员2值,…};
3、定义结构体时顺便创建变量。

使用:
1、定义结构体时的关键字是struct,不可省略;
2、创建结构体变量时,关键字struct可以省略;
3、结构体变量利用操作符“ . ”访问成员。

#include<iostream>
using namespace std;
#include<string>//创建学生数据类型
//自定义数据类型,一些类型集合组成的一个类型
struct Student
{//成员列表string name;int age;int score;
}s3;  //s3结构体变量创建方法3int main()
{//1、struct Student s1;struct Student s1;  //struct关键字可以省略s1.name = "张三";s1.age = 20;s1.score = 90;cout << "姓名:" << s1.name << " 年龄:" << s1.age << " 分数:" << s1.score << endl;//2、struct Student s2={...};struct Student s2 = { "李四",21,95 };cout << "姓名:" << s2.name << " 年龄:" << s2.age << " 分数:" << s2.score << endl;//3、在定义结构体时顺便创建结构体变量s3.name = "王五";s3.age = 22;s3.score = 99;cout << "姓名:" << s3.name << " 年龄:" << s3.age << " 分数:" << s3.score << endl;system("pause");return 0;
}输出:
姓名:张三 年龄:20 分数:90
姓名:李四 年龄:21 分数:95
姓名:王五 年龄:22 分数:99

结构体数组

作用:将自定义的结构体放入到数组中方便维护。
语法:struct 结构体名 数组名{元素个数}={{ },{ },…{ }};

#include<iostream>
using namespace std;
#include<string>//创建学生数据类型
struct Student
{string name;int age;int score;
};int main()
{//创建结构体数组struct Student stuArray[3] ={{"张三",18,90},{"李四",19,91},{"王五",20,92}};stuArray[0].name = "赵六";stuArray[0].age = 30;stuArray[0].score = 99;for (int i = 0; i < 3; i++){cout << "姓名:" << stuArray[i].name << " 年龄:" << stuArray[i].age << " 分数:" << stuArray[i].score << endl;}system("pause");return 0;
}输出:
姓名:赵六 年龄:30 分数:99
姓名:李四 年龄:19 分数:91
姓名:王五 年龄:20 分数:92

结构体指针

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

利用操作符 -> 可以通过结构体指针访问结构体属性。

#include<iostream>
using namespace std;
#include<string>//创建学生数据类型
struct Student
{string name;int age;int score;
};int main()
{//1、创建学生结构体变量struct Student s = { "张三",18,100 };//2、通过指针指向结构体变量struct Student* p = &s;  //关键字struct可以省略//3、通过指针访问结构体变量中的数据//通过结构体指针访问结构体中的属性,需要利用"->"cout << "姓名:" << p->name<< " 年龄:" << p->age << " 分数:" << p->score << endl;system("pause");return 0;
}

结构体嵌套结构体

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

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

#include<iostream>
using namespace std;
#include<string>//定义学生结构体
struct student
{string name;int age;int score;
};//定义老师结构体
struct teacher
{int id;string name;int age;struct student s;  //老师辅导的学生
};int main()
{//创建老师结构体变量teacher t;t.id = 007;t.name = "老王";t.age = 36;t.s.name = "小王";t.s.age = 18;t.s.score = 99;system("pause");return 0;
}

结构体做函数参数

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

传递方式有两种:值传递和地值传递。

#include<iostream>
using namespace std;
#include<string>//定义学生结构体
struct student
{string name;int age;int score;
};//值传递
void print1(struct student s)
{cout << "在子函数中 姓名:" << s.name << " 年龄:" << s.age << " 分数:" << s.score << endl;
}//地址传递
void print2(struct student* p)
{cout << "在子函数中 姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;
}int main()
{//创建结构体变量struct student s;s.name = "小四";s.age = 36;s.score = 99;print1(s);print2(&s);system("pause");return 0;
}

结构体中const使用场景

作用:用const来防止误操作。

#include<iostream>
using namespace std;
#include<string>//定义学生结构体
struct student
{string name;int age;int score;
};//值传递的形参不改变实参
void print(const student *s)//加const防止函数体中的误操作
{s->age = 66;//操作失败,因为加了const修饰
}int main()
{//创建结构体变量struct student s = {"张三",18,95};print(&s);system("pause");return 0;
}


http://www.ppmy.cn/news/24563.html

相关文章

【Java|多线程与高并发】 使用Thread 类创建线程的5种方法如何查看程序中的线程

文章目录前言线程创建1.继承Thread类重写run()方法如何查看程序中的线程?2.实现Runnable接口3.使用匿名内部类,继承Thread4.使用匿名内部类,实现Runnable5.⭐使用Lambda表达式,创建线程(重要)Thread 的常见构造方法总结前言 在这里主要补充说明一些问题,方便更好地理解下面的…

【C#基础】C# 变量和常量的使用

序号系列文章1【C#基础】C# 程序通用结构总结2【C#基础】C# 程序基础语法解析3【C#基础】C# 数据类型总结文章目录前言一. 变量&#xff08;variable&#xff09;1&#xff0c;变量定义及初始化2&#xff0c;变量的类别3&#xff0c;接收输出变量二. 常量&#xff08;constant&…

开源、低成本的 Xilinx FPGA 下载器(高速30MHz)

目前主流的Xilinx下载器主要有两种&#xff1a;一种是Xilinx官方出品的Xilinx Platfom Cable USB&#xff0c;还有一个就是Xilinx的合作伙伴Digilent开发的JTAG-HS3 Programming Cable。 JTAG-HS系列最大支持30MHz下载速度&#xff0c;基于FTDI的FT2232方案。 JTAG-HS系列对比…

【C语言必经之路——第11节】初阶指针(2)

五、指针的运算1、指针与整数相加减看一下下面的代码&#xff1a;#include<stdio.h> int my_strlen(char* str) {int count0;while(*str!\0){count;str;//指针加减整数}return count; } int main() {int lenmy_strlen("abcdef");printf("%d\n",len);…

♡ — MySQL 存储引擎

MySQL 存储引擎架构 MySQL 存储引擎采用的是插件式架构&#xff0c;支持多种存储引擎&#xff0c;我们甚至可以为不同的数据库设置不同的存储引擎以适应不同场景的需要&#xff1b;存储引擎是基于表的&#xff0c;而不是数据库。 MyISAM 和 InnoDB 的区别 MySQL 5.5 之前&am…

Linux系统之网卡子接口配置方法

Linux系统之网卡子接口配置方法一、本地系统环境检查1.检查系统版本2.检查系统内核版本3.检查本地IP地址二、网卡子接口介绍1.网卡子接口简介2.网卡子接口的优点3.网卡子接口的缺点三 加载802.1q 模块1.查看系统802.1q 模块信息2.加载802.1q 模块3.检查802.1q 模块加载状态四、…

看完这篇 教你玩转渗透测试靶机vulnhub——Hack Me Please: 1

Vulnhub靶机Hack Me Please: 1渗透测试详解Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;漏洞利用③&#xff1a;获取反弹shell&#xff1a;④&#x…

1.十大排序算法

1.什么是排序算法&#xff1f; 在梳理十大排序算法之前&#xff0c;虽然知道排序算法是将数字或字母按增序排列的算法&#xff0c;但该理解过于片面&#xff0c;那排序算法的权威定义是什么呢。 一个排序算法&#xff08;英语&#xff1a;Sorting algorithm&#xff09;是一种…