C++结构体的使用

一、结构体指针

定义学生结构体

struct Student
{
	//成员列表
	string name;
	//年龄
	int age;
	//分数
	int score;
};

1、创建结构体变量

Student s = { "张三",18,100 };

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

因为变量s的类型是上面结构体新定义的Student型,所以在定义指针p的时候需要也将指针定义为Student型的

Student * p = &s;

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

指针通过->访问结构体中的变量

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

二、结构体嵌套结构体

作用:结构体中的成员可以是另外一个结构体
例如:每个老师辅导一个学员,一个老师的结构体中,记录着一个学生的结构体

1、结构体定义

//1.结构体定义
//语法:struct 类型名称{成员列表}
struct Student
{
	//成员列表
	string name;
	//年龄
	int age;
	//分数
	int score;
	
};

struct Teacher
{
	int id;
	string name;
	int age;
	struct Srudent s;
};

2、结构体嵌套结构体

创建老师

//创建老师
Teacher t;

//老师的属性
t.id = 2021018;
t.name = "老王";
t.age = 50;

//老师对应的学生的属性
t.stu.age = 18;
t.stu.name = "张三";
t.stu.score = 100;

打印相关信息输出:

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

out:
老师姓名:老王 老师编号:2021018 老师年龄:50 学生姓名:张三 学生年龄:18 学生分数:100

三、结构体做函数参数

作用:将结构体作为参数向函数中传递
传递方式有两种:
——值传递
——地址传递在这里插入代码片
继续使用上一节定义的结构体

值传递

void printStudent(Student stu)
{
	cout << "学生姓名:" << stu.name << endl
		<< "学生年龄:" << stu.age << endl
		<< "学生分数:" << stu.score << endl;
}

因为上面只定义了结构体Teacher的对象t,所以若想传入Student的参数,需要通过t调用Teacher结构体中的Student结构体的对象stu,即使用t.stu来进行形参的传递。

printStudent(t.stu);

地址传递:

void printStudent_point(Student * stu)
{
	cout << "学生姓名:" << stu->name << endl
		<< "学生年龄:" << stu->age << endl
		<< "学生分数:" << stu->score << endl;
}

将函数中的形参改为指针,进行地址传递,可以减少内存空间,而且不会复制新的副本出来。

printStudent_point(&t.stu);

在值传递时,形参发生改变不会影响实参,即函数内数据的修改不会影响函数外同一个数据的大小;
而地址传递时,形参修改可以改变实参,即函数内数据的修改会同时改变函数外同一个数据的大小。

总结:如果不想修改主函数中的数据,用值传递;反之如果想要修改主函数中的数据,用地址传递。

四、结构体中const的使用

作用:用const来防止误操作

void printStudent_point(const Student * stu)
{
	stu->age = 100;
	cout << "学生姓名:" << stu->name << endl
		<< "学生年龄:" << stu->age << endl
		<< "学生分数:" << stu->score << endl;
}

在代码中将传入的形参用const修饰,再在打印函数中尝试改变形参的对象的属性值,输出会报错:
在这里插入图片描述
加入const之后,一旦有修改的操作就会报错,可以防止我们误操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值