结构体属于用户自定义的数据类型,允许用户储存不同的数据类型
struct 结构体名 {结构体成员列表};
通过学生类型创建具体学生,在主函数中
//第一种
struct student s1;//创建时可以省略struct,如:student s1;但是定义时不可以省略
s1.name = "张三";
s1.age = 18;
s1.score = 100;
cout << "姓名为" << s1.name << " 年龄" << s1.age << " 分数" << s1.score << endl;
//第二种
struct student s2 = { "李四",19,80};
cout << "姓名为" << s2.name << " 年龄" << s2.age << " 分数" << s2.score << endl;
//第三种在定义结构体的末尾
s3.name = "王五";
s3.age = 15;
s3.score = 90;
cout << "姓名为" << s3.name << " 年龄" << s3.age << " 分数" << s3.score << endl;
第三种定义结构体在这里,直接在创建数据类型时创建,方便快捷但是不方便寻找
struct student //创建学生数据类型
{
string name;//字符串
int age;//整型
int score;//分数
}s3;//第三种
结构体嵌套结构体
结构体中的成员可以说另一个结构体
每个老师名下有5个老师,学生拥有不同的姓名和分数
先创建老师
//先创建老师
struct teacher
{
int id;
string name;
int age;
struct student stu;
};
//两种不同的传递方式 将学生姓名与成绩传递到老师名下
void printstudent1(struct student s)//值传递
{
s.age = 100;
cout << "子函数1中打印" << s.name
<< " 年龄" << s.age << " 分数"
<< s.score << endl;
}
void printstudent2(struct student* p)
{
p->age = 200;
cout << "子函数2中打印" << p->name
<< " 年龄" << p->age << " 分数"
<< p->score << endl;
}
结构体数组
//结构体数组
struct student arr[3] =
{
{"张三",12,60},
{"李四",14,70},
{"王五",15,90},
};
//后续给结构体数组内赋值
arr[2].name = "赵六";
arr[2].age = 19;
arr[2].score = 60;
for (int i = 0; i < 3; i++)
{
cout << "姓名为" << arr[i].name << " 年龄" << arr[i].age << " 分数" << arr[i].score << endl;
}
结构体指针
利用操作符->可以通过结构体指针访问结构体属性
创建学生结构体变量
struct student s = { "张三",13,30 };
student* p = &s;//等号左右应该一样的数据类型
cout << "姓名为" << p->name << " 年龄" << p->age << " 分数" << p->score << endl;
结构体嵌套结构体
结构体中的成员可以说另一个结构体
老师信息传入
teacher t;
t.id = 1000;
t.name = "jjj";
t.age = 30;
t.stu.name = "sss";//老师学生的信息
结构体做函数参数
将结构体作为参数向函数中传递
值传递与地址传递
将学生信息传入
struct student s;
s.name = "张三";
s.age = 18;
s.score = 100;
打印
printstudent1(s);
printstudent2(&s);
cout<<"main函数中打印"<<s.name<< " 年龄" << s.age << " 分数" << s.score << endl;
//地址传递会改变主函数数据
结构体中const使用场景
用const防止误操作
void printstudent3(const student *s)
{
//将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来
//s->age = 99;//此处错误,加入const后const使得student不会被改变,可以防止误操作
cout << " 名字 " << s->name
<< " 年龄 " << s->age
<< " 分数 "<< s->score << endl;
}
printstudent3(&s);