c++ 结构体知识点大集合

结构体概念

属于用户自己定义的数据类型,允许用户储存不同类型的数据

定义结构体语法

struct 结构体名 {结构成员列表(即结构体属性)}

定义中的struct不可省略,其他地方的可以省略

案例:创建学生结构体

三种定义结构体的方法

"."用来访问结构体属性

#include<iostream>
#include<string>
using namespace std;

struct Student  //定义结构体
	{
		string name;
		int age;
		int weight;
	};
int main() 
{
	//创建结构体变量
	//使用三种不同方法创建三个变量
	//1.
	struct Student s1;//创建变量
	s1.name = "小明";//给变量赋值
	s1.age = 18;
	s1.weight = 52;
	//2.
	struct Student s2 = { "小红",18,45 };//创建变量时定义初始值
	//3.
	//定义时创建结构体变量
	//struct Student  //定义结构体
	//{
	//	string name;
	//	int age;
	//	int weight;
	//}s3;
	//s1.name = "小亮"; //给变量赋值
	//s1.age = 18;
	//s1.weight = 55;
	return 0;
}

结构体数组

作用:当变量较多时,将结构体放入数组中方便维护

#include<iostream>
#include<string>
using namespace std;

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

int main() 
{
	struct Student stuarr[3] = {
		{"小明",18,52},
		{"小红",18,45},
		{"小亮",18,55}
	};
	//可以给数组中的元素重新赋值
	stuarr[0] = { "小刚",18,54 };
	//遍历数组结构体
	for (int i = 0; i < 3; i++)
	{
		cout << stuarr[i].name << stuarr[i].age << stuarr[i].weight << endl;
	}
	return 0;
}

结构体指针

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

操作符"->"可通过结构体指针访问结构体属性

//创建疫情病例的结构体
#include<iostream>
#include<string>
using namespace std;

struct eg  //定义结构体
	{
		string name;
		int age;
	};

int main() 
{
	struct eg e = {"张三",55};
	//指针指向结构体
	struct eg* p = &e;
	//指针访问结构体
	cout << p->name << p->age << endl;
	return 0;
}

结构体嵌套

定义结构体时先定义内层结构体再定义外层(从内到外)

//案例:学校举办一对多辅导活动,登记赵老师辅导小明和小亮的信息
#include<iostream>
#include<string>
using namespace std;

struct student//定义学生结构体
{
	string name;
	int score;
};
struct teacher   //定义老师结构体
	{
		string id;
		string subject;
		struct student s[2];//创建学生结构体变量  即  嵌套结构体
	};

int main() 
{
	struct teacher t;
	t.id = "007";
	t.subject = "数学";
	t.s[0].name = "小明";
	t.s[0].score = 67;
	t.s[1].name = "小亮";
	t.s[1].score = 75;
	cout << t.id << t.subject << t.s[0].name << t.s[0].score << t.s[1].name
		<< t.s[1].score << endl;
	return 0;
}

结构体做函数参数

//案例:打印学生信息
#include<iostream>
#include<string>
using namespace std;

struct student//定义学生结构体
{
	string name;
	int score;
};

//值传递(改变形参的同时不改变实参)
void ptintf_student(struct student s)
{
	cout << s.name << endl << s.score << endl;
}

//地址传递(改变形参的同时改变实参)
void printf_student2(struct student* p)
{
	cout << p->name << endl << p->score << endl;
}

int main() 
{
	struct student s;
	s.name = "小明";
	s.score = 60;

	ptintf_student(s);
	printf_student2(&s);
	
	return 0;
}

使用const修饰结构体中数据的场景

作用:防止误操作

        在向函数传入参数的过程中,为防止占用内存过多,不适用值传递使用地址传递(即定义指针变量做参数).但是地址传递的特点是,改变形参的同时改变实参.所以为了防止误操作在定义参数列表时用const修饰指针变量.

        如:

void printfstudent(const struct student *p)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值