C++入门基础Chapeter06结构体

一、结构体学习
结合示例分析学习:
1、创建学生数据类型:学生包括(姓名,年龄,分数)
自定义数据类型:一些类型集合组成的一个类型
语法: struct 类型名称 { 成员列表 }

struct Student
{
	//成员列表

	//姓名
	string name;
	//年龄
	int age;
	//分数
	int score;
}s3;//顺便创建结构体变量

2、通过学生类型创建具体学生
PS:struct 关键字创建时(实例)可以省略,定义的时候不可省略
1)创建结构体学生
2.1 方法一:struct Student s1

struct Student s1;

s1.name = "Casper";
s1.age = 22;
s1.score = 150;

//调用输出string类型的记得引用头文件:#include <string>
cout << "姓名:" << s1.name << "\t" << "年龄:" << s1.age << "\t" << "分数:" << s1.score << endl;

2.2 方法二:struct Student s2 = { … }

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

2.3 方法三:在定义结构体时顺便创建结构体变量(不建议)

s3.name = "shabi";
s3.age = 35;
s3.score = 0;
cout << "姓名:" << s3.name << "\t" << "年龄:" << s3.age << "\t" << "分数:" << s3.score << endl;

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

结构体数组
3.1定义结构体
3.2创建结构体数组

struct  Student stuArray[3] =
{
		{"张三y",18,100},
		{"陈沙b",20,80},
		{"胡诌q",44,0}
};

3.3结构体数组中的元素赋值

stuArray[2].name = "胡zz";

3.4遍历结构体数组

for (int i = 0; i < 3; i++)
{
	cout << "姓名:" << stuArray[i].name << "\t" << "年龄:" << stuArray[i].age << "\t" << "分数:" << stuArray[i].score << endl;
}

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

利用操作符->可以通过结构体指针访问结构体属性
1、创建学生结构体变量

Student stu1 = { "张三y",18,100 };

2、通过指针指向结构体变量

Student* p = &stu1;

3、通过指针访问结构体变量中的数据

cout << "姓名:" << p->name << "\t" << "年龄:" << p->age << "\t" << "分数:" << p->score << endl;

5、结构体嵌套结构体

struct MyStudent
{
	string name;//姓名
	int age;//年龄
	int score;//分数
};

struct MyTeacher
{
	int id;
	string name;
	int age;
	struct MyStudent myStu;
};

void main()
{
	//创建老师
	MyTeacher t;
	t.id = 10000;
	t.name = "老王";
	t.age = 50;
	t.myStu.name = "小王";
	t.myStu.age = 20;
	t.myStu.score = 60;
}

6、结构体做函数参数
作用:将结构体作为参数向函数中传递
传递方式:传值、传引用
示例:
struct MyStudent s;
s.name = “张三”;
s.age = 20;
s.score = 85;

//年龄:20
printStudent1(s);

//年龄:100
printStudent1(&s);

7、结构体中const使用场景
作用:用const来防止误操作

//创建结构体变量
//struct Student s = { "张三",15,70 };

PS:
1、问题:通过函数打印结构体变量信息,虽然值传递不会改变数据信息,但是每次复制一份,造成了内存开销过大
解决方案:将函数中的形参改为指针,可以减少内存空间(指针存放的是地址,无论这块数据内容有多少,只占用4 or 8个字节,而且不会复制出一个新的副本出来)

printStudents(&s);

二、结构体练习题
1、设计一个英雄的结构体,包括姓名,年龄,性别;
创建结构体数组,数组中存放5名英雄;
通过冒泡排序的算法,将数组中的英雄按照年龄进行升序排列,最终打印排序后的结果;

#include <iostream>
using namespace std;

//设计一个英雄的结构体
struct  Hero
{
	string name;
	int age;
	string sex;
};

//通过冒泡排序进行升序排序
void BubbleSort(struct Hero hero[], int len) {
	for (int i = 0; i < len; i++)
	{
		for (int j = 0; j < len - 1; j++)
		{
			if (hero[i].age < hero[j].age)
			{
				Hero temp = hero[i];
				hero[i] = hero[j];
				hero[j] = temp;
			}
		}
	}
}

int main()
{
	//创建结构体数组
	Hero hero[] =
	{
		{ "刘备",23,"男" },
		{ "关羽",22,"男" },
		{ "张飞",20,"男" },
		{ "赵云",21,"男" },
		{ "貂蝉",19,"女" }
	};

	//取得数组长度
	int len = sizeof(hero) / sizeof(hero[0]);
	BubbleSort(hero, len);

	//打印排序后的结果
	for (int i = 0; i < len; i++)
	{
		cout << hero[i].name << "\t" << hero[i].age << "\t" << hero[i].sex << "\t" << endl;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43036676/article/details/100141308