1.1 结构体嵌套结构体
作用: 结构体中的成员可以是另一个结构体
**例如:**每个同学可以拥有很多个偶像,一个同学的结构体中,记录很多个偶像的结构体
示例:
//学生结构体定义
#include<iostream>
#include<string>
using namespace std;
struct likes_idol
{
//成员列表
string name; //姓名
string country;
int age; //年龄
double height; //身高(米)
};
//教师结构体定义
struct student
{
//成员列表
int id; //学生学号
string name; //学生姓名
int age; //学生年龄
struct likes_idol b; //子结构体偶像
};
int main() {
struct student s1;
s1.id = 20428;
s1.name = "小侯";
s1.age = 18;
s1.b.age = 19;
s1.b.country = "Japan";
s1.b.height = 1.79;
s1.b.name = "道枝骏佑" ;
cout <<s1.id << " " << s1.name << " " << s1.age << endl;
cout << s1.b.name << " " << s1.b.age << " "
<< s1.b.country<< " " <<s1.b.height << endl;
system("pause");
return 0;
}
**总结:**在结构体中可以定义另一个结构体作为成员,用来解决实际问题
1.2 结构体做函数参数
**作用:**将结构体作为参数向函数中传递
传递方式有两种:
- 值传递
- 地址传递
示例:
//学生结构体定义
struct likes_idol
{
//成员列表
string name; //姓名
string country;//国家
int age; //年龄
double height; //身高
};
//值传递
void print_idol(likes_idol idol1 )
{
idol1.age = 18;
cout << "子函数中 姓名:" << idol1.name << " 年龄: " << idol1.age << " 国籍:" << idol1.counrty<<"身高:"<<idol1.height << endl;
}
//地址传递
void print_idol(likes_idol *idol2)
{
idol2->age = 28;
cout << "子函数中 姓名:" << idol2->name << " 年龄: " << idol2->age << " 国籍:" << idol2->counrty<<"身高:"<<idol2->height << endl;
}
int main() {
likes_idol idol = {"道枝骏佑","Japan",19,1.79};
//值传递
printStudent(idol);
cout << "主函数中 姓名:" << idol.name << " 年龄: " << idol.age << " 国籍:" << idol.counrty<<"身高:"<<idol.height << endl;
cout << endl;
//地址传递
printStudent2(&idol);
cout << "主函数中 姓名:" << idol.name << " 年龄: " << idol.age << " 国籍:" << idol.counrty<<"身高:"<<idol.height << endl;
system("pause");
return 0;
}
总结:如果不想修改主函数中的数据,用值传递,反之用地址传递,和普通变量一样。
1.3结构体中 const使用场景
**作用:**用const来防止误操作
示例:
//偶像结构体定义
struct likes_idol
{
//成员列表
string name; //姓名
string country;//国家
int age; //年龄
double height; //身高
};
//const使用场景
void print_idol(const likes_idol idol1) //加const防止函数体中的误操作
{
idol1.age = 18;//操作失败因为加了cons