C++学习笔记7--结构体

概念

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

定义和使用

语法:

struct 结构体名 { 结构体成员列表 };

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

  • struct 结构体名变量名
  • struct结构体名变量名={成员1值,成员2值…}
  • 定义结构体时顺便创建变量
//自定义数据类型,一些类型集合组成的一个类型
//语法  struct类型名称 { 成员列表 }
方法1struct Student
{
	//成员列表
	//姓名
	string name;
	//年龄
	int age;
	//分数
	int score;
}s3; //顺便创建结构体变量,s3就是结构体变量

int main()
{
//2.1 struct Student s1 
	//struct关键字可以省略
	
	struct Student s1;
	//给 s1 属性赋值,通过 . 访问结构体变量中的属性
	s1.name = "张三";
	s1.age = 18;
	s1.score = 100;
	cout << "姓名: " << s1.name << " 年龄: " << s1.age << " 分数:" << s1.score << endl;
	
//2.2 struct Student s2 = {...}

	struct Student s2 = { "李四",19,80 };
	cout << "姓名: " << s2.name << " 年龄: " << s2.age << " 分数:" << s2.score << endl;

//2.3 定义结构体时顺便创建结构体变量

	s3.name = "王五";
	s3.age = 20;
	s3.score = 60;
	cout << "姓名: " << s3.name << " 年龄: " << s3.age << " 分数:" << s3.score << endl;

	return 0;
}

结构体数组

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

语法:struct 结构体名 数组名[元素个数] = { {} ,{},... {} }
//结构体数组
//1. 定义结构体
struct Student
{
	string name;
	int age;
	int score;
}; 
int main()
{
//2. 创建结构体数组
	struct Student stuArr[3] =
	{
		{"张三", 18 ,100},
		{"李四", 28 , 90},
		{"王五",38 , 80}
	};
	//3. 给结构体数组中的元素赋值,数组里面的内容可以改
	stuArr[2].name = "赵六";
	stuArr[2].age = 58;
	stuArr[2].score = 60;
	//4. 遍历结构体数组
	for (int i = 0; i < 3; i++)
	{
		cout << "姓名; " << stuArr[i].name;
		cout << " 年龄:" << stuArr[i].age;
		cout << " 分数:" << stuArr[i].score << endl;
	}
	return 0;
}

在这里插入图片描述

结构体指针

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

//结构体指针
//定义结构体
struct Student
{
	string name;
	int age;
	int score;
};

int main3()
{
	//1. 创建学生结构体变量
	struct Student s = { "张三", 18 , 100 };
	//2. 通过指针指向结构体变量
	struct Student* p = &s;
	//3. 通过指针访问结构体变量中的数据
	cout << "姓名: " << p->name
		<< " 年龄: " << p->age
		<< " 分数: " << p->score << endl;
	return 0;

在这里插入图片描述

结构体嵌套结构体

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

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

//定义学生结构体
struct student
{
	string name;
	int age;
	int score;
};
//定义老师结构体
struct teacher
{
	string name;  // 教师姓名
	int age; //教师年龄
	int id; //教师编号
	struct student stu; //辅导的学生
};

struct teacher tArr[1] =
{
	{"王老师", 50 ,10000}
};

struct student sArr[1] =
{
	{"张三", 20, 80}
};

int main()
{
	//结构体嵌套结构体
	//创建老师
	teacher t;
	t.id = 10000;
	t.name = "王老师";
	t.age = 50;
	t.stu.name = "张三";
	t.stu.age = 20;
	t.stu.score = 80;

	cout << "教师姓名: " << t.name << " 教师编号: " << t.id << " 教师年龄: " << t.age
		<< " 教师辅导的学生姓名: " << t.stu.name << " 学生年龄:" 
		<< t.stu.age << " 学生分数: " << t.stu.score << endl;

	//用数组来写
	cout << "教师姓名: " << tArr[0].name << " 教师编号: " << tArr[0].id << " 教师年龄: " 
		<< tArr[0].age << " 教师辅导的学生姓名: " << sArr[0].name << " 学生年龄:" 
		<< sArr[0].age<< " 学生分数: " << sArr[0].score << endl;


	return 0;
}

在这里插入图片描述

结构体做函数参数

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

传递方式有两种:

  • 值传递
  • 地址传递
//定义结构体
struct Student
{
	string name;
	int age;
	int score;
};

//打印学生信息函数
//1. 值传递
void PrintStudent1(struct Student s)
{
	s.age = 100;
	cout << "子函数1中打印 姓名: " << s.name << " 年龄: " << s.age 
	<< " 分数:" << s.score << endl;
}

//2. 地址传递
void PrintStudent2(struct Student *p)
{
	p->age = 100;
	cout << "子函数2中打印 姓名: " <<p->name << " 年龄: " << p->age 
	<< " 分数:" << p->score << endl;
}

int main()
{
	//结构体做函数参数
	//将学生传入到一个参数中, 打印学生身上的所有信息 
	
	//创建结构体变量
	struct Student s = { "张三", 18 , 100 };
	PrintStudent1(s);//值传递
	cout << "main函数中打印 姓名: " << s.name << " 年龄: " << s.age << " 分数:" 
	<< s.score << endl;
	PrintStudent2(&s);//地址传递
	cout << "main函数中打印 姓名: " << s.name << " 年龄: " << s.age << " 分数:" 
	<< s.score << endl;

	return 0;
}

在这里插入图片描述
注意:

结构体做函数参数

值传递时,形参发生改变,不会影响实参的值,

地址传递时,形参发生改变,实参也会相应改变。

结构体中 const使用场景

用 const 来防止误操作

struct student 
{
	string name;
	int age;
	int score;
};

//将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来
void PrintStudent(const student *s)
{
	加入const后,一旦有修改的操作就会报错,可以防止我们的误操作
	//s->age = 150;  
	
	cout << "姓名: " << s->name << " 年龄: " << s->age << " 分数:" << s->score << endl;
}

int main()
{
	//创建结构体变量
	struct student s = { "张三", 15 ,70 };

	//通过函数打印结构体变量信息
	PrintStudent(&s);
	cout << "张三的年龄为: " << s.age << endl;

	return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一记绝尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值