首页 > 其他分享 >CH08_结构体

CH08_结构体

时间:2024-06-11 20:45:47浏览次数:7  
标签:string CH08 age name Student 结构 struct

CH08_结构体


基本概念

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

定义和使用

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

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

  • struct 结构体名 变量名
  • struct 结构体名 变量名=
  • 定义结构体时顺便创建变量

示例:

#include<iostream>
using namespace std;

//定义结构
struct  Student
{
	string name;
	int age;
	string sex;
} s3;

int main() {

	//方式1(struct可省略)
	//struct Student s1;
	Student s1;
	s1.name = "张三";
	s1.age = 19;
	s1.sex = "男";

	cout << "姓名:" << s1.name << "年龄:" << s1.age << "性别:" << s1.sex << endl;;
		
	//方式2(struct可省略)
	//struct Student s2 = { "李四",20,"女" };
	Student s2 = {"李四",20,"女"};
	cout << "姓名:" << s2.name << "年龄:" << s2.age << "性别:" << s2.sex<<endl;

	//方式3
	s3.name = "王五";
	s3.age = 21;
	s3.sex = "男";
	cout << "姓名:" << s3.name << "年龄:" << s3.age << "性别:" << s3.sex<<endl;

	system("pause");
	return 0;
}

结构体数组

作用:将自定义的结构体放入到数组中方便维护

语法:struct 结构体名 数组名[元素个数]={{},{},{},..}

示例:

#include<iostream>
using namespace std;

//定义结构
struct  Student
{
	string name;
	int age;
	string sex;
};

int main() {
	

	//结构体数组
	Student stus[3] =
	{
		{"张三",18,"男"},
		{"李四",20,"男"},
		{"王五",22,"女"}
	};

	//修改数组中的元素
	stus[2].name = "赵六";
	stus[2].sex = "男";

	//遍历数组
	for (int i = 0; i < 3; i++) {
		cout << "姓名:" << stus[i].name << endl;
		cout << "年龄:" << stus[i].age << endl;
		cout << "性别:" << stus[i].sex << endl;
		cout << "------------------------" << endl;
	}

	system("pause");
	return 0;
}

结构体指针

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

语法:结构体 ->成员

示例:

#include<iostream>
using namespace std;

//定义结构
struct  Student
{
	string name;
	int age;
	string sex;
};

int main() {

	//创建学生结构对象
	Student stu = {"张三",18,"男"};

	//创建结构类型指针
	Student* p = &stu;

	//通过指针访问结构中的属性
	//p->name
	cout << "姓名:" << p->name << endl;
	cout << "年龄:" << p->age << endl;
	cout << "性别:" << p->sex << endl;

	cout << "姓名:" << (*p).name << endl;

	system("pause");
	return 0;
}

结构体嵌套

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

示例:

#include<iostream>
using namespace std;

//定义学生结构
struct  Student
{
	string name;	//姓名
	int age;		//年龄
	string sex;		//性别
};

//定义小组结构
struct Group {
	string groupNmae;//组名
	Student stus[3];	//学生结构数组
};

int main() {

	Group g = { "一组",
		{
		{"张三",18,"男"},
		{"李四",20,"男"},
		{"王五",22,"女"}
		}
	 };

	cout << "组名:" << g.groupNmae << endl;
	for (int i = 0; i < 3; i++) {
		cout << "------------------------------" << endl;
		cout << "姓名:" << g.stus[i].name << endl;
		cout << "年龄:" << g.stus[i].age << endl;
		cout << "性别:" << g.stus[i].sex << endl;
		
	}

	system("pause");
	return 0;
}

结构体做函数的参数

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

传递方式:

值传递

地址传递

示例:

#include<iostream>
using namespace std;

//定义学生结构
struct  Student
{
	string name;	//姓名
	int age;		//年龄
	string sex;		//性别
};

//值传递
void fun1(Student stu) {
	stu.age = 100;
	cout << "姓名:" << stu.name << "年龄:" << stu.age << "性别:" << stu.sex << endl;

}

//引用传递
void fun2(Student* stu) {
	stu->age = 100;
	cout << "姓名:" << stu->name << "年龄:" << stu->age << "性别:" << stu->sex << endl;

}

int main() {

	Student stu = { "张三",20,"男" };

	//值传递
	//fun1(stu);

	//引用传递
	fun2(&stu);

	cout << "姓名:" << stu.name << "年龄:" << stu.age << "性别:" << stu.sex << endl;

	system("pause");
	return 0;
}

结构体中const使用场景

作用:在引用方式传递时,用const来防止误操作。(引用方式传递节约内存空间)。

示例:

#include<iostream>
using namespace std;

//定义学生结构
struct  Student
{
	string name;	//姓名
	int age;		//年龄
	string sex;		//性别
};



//引用传递
void fun2(const Student* stu) {
	//stu->age = 100; //报错:禁止更改
	cout << "姓名:" << stu->name << "年龄:" << stu->age << "性别:" << stu->sex << endl;

}

int main() {

	Student stu = { "张三",20,"男" };

	//引用传递
	fun2(&stu);

	cout << "姓名:" << stu.name << "年龄:" << stu.age << "性别:" << stu.sex << endl;

	system("pause");
	return 0;
}

标签:string,CH08,age,name,Student,结构,struct
From: https://www.cnblogs.com/kaige-chen/p/18242672

相关文章

  • 【结构识别】Reconstructing propagation networks with natural diversity and ident
    摘要从数据中重构复杂网络结构和动力学的能力是理解和控制复杂系统集体动力学的基础。尽管最近在这方面取得了进展,但利用随机动态过程的有限时间序列重建网络仍然是一个尚未解决的问题。我们提出了一个基于压缩感知的框架去重构发生随机扩散动力学的复杂网络。我们将该方法应用于......
  • wimlib API 提供了一系列用于处理 Windows 映像文件(.wim 文件)的函数和数据结构,使开发
    wimlibAPI提供了一系列用于处理Windows映像文件(.wim文件)的函数和数据结构,使开发人员能够在其应用程序中集成对WIM文件的创建、修改和提取功能。以下是一些常见的wimlibAPI:WIM文件的创建和初始化:wimlib_create_new_wim():创建一个新的WIM文件。wimlib_open_wim():......
  • 飞书golang 发送机器人结构定义
    飞书golang发送机器人结构定义在Golang中,可以定义一个结构体来表示飞书(Feishu)机器人的数据。以下是一个简单的示例,展示了如何定义用于发送消息到飞书机器人的结构体:  packagemain import("bytes""encoding/json""fmt""net/http") //FeishuRobotPayl......
  • Java数据结构与算法(回溯算法)
    前言回溯算法是一种通过构建问题的解树(或解图)来逐步构建候选解的通用算法。它尝试通过一系列选择来解决问题,选择可能包括移动、添加一个元素到当前解、决定一个解的某部分等。当发现某个选择无法导致一个有效解时,算法会回退(即回溯),撤销该选择,并尝试其他选择。回溯算法通常用于......
  • 数据结构--第十章--内排序
    插入排序直接插入排序是一种稳定的排序方法快速排序递归调用树与性能分析快排算法实际上就是对枢轴的左右分区进行递归操作高效实现的快速排序算法是不稳定的且很复杂堆排序堆排序是不稳定的排序方法归并排序基数排序......
  • 结构化思维
     在日常工作中,我们时常会碰到这样的情况,有的人讲事情逻辑非常混乱,罗列了很多事项,却把握不到重点,无法把一件事情说清楚。这种思维混乱是典型的缺少结构化思维的表现。结构化思维非常重要,不仅仅体现在表达上,也体现在在我们分析问题的过程中。具备结构化思维,才能将问题分析地更......
  • FFmpeg结构体:AVIOContext
    1.描述AVIOContext是FFmpeg管理输入输出数据的结构体,位于avio.h文件中。2.结构体定义1typedefstructAVIOContext{2/**3*Aclassforprivateoptions.4*5*IfthisAVIOContextiscreatedbyavio_open2(),av_classissetand......
  • 数据结构---排序算法
    个人介绍hellohello~,这里是code袁~......
  • 开源高性能结构化日志模块NanoLog
      最近在写数据库程序,需要一个高性能的结构化日志记录组件,简单研究了一下Microsoft.Extensions.Logging和Serilog,还是决定重造一个轮子。一、使用方法  直接参考以下示例代码:NanoLogger.Start();DateTime?nullable=null;constboolboolValue=true;constcharch......
  • 【算法与数据结构】【数组篇】【题1-题5】
    1.数组基本知识点1.1概念数组就是一个集合。数组会用一些名为索引的数字来标识每项数据在数组中的位置,且在大多数编程语言中,索引是从0算起的。我们可以根据数组中的索引,快速访问数组中的元素。数组中的元素在内存中是连续存储的,且每个元素占用相同大小的内存。1.2相关操......