C++结构体总结附带案例和代码块!

C++结构体总结附带案例和代码块!结构体——结构体的定义和使⽤
结构体属于⽤户⾃定义的数据类型,允许⽤户存储不同的数据类型
语法:struct 结构体名{结构体成员列表}
#include <iostream>
t10钢using namespace std;
#include<string>
struct student
{
string name;
int age;
int score;
};
int main()
{
//定义变量⽅法1
struct student s1;
//定义变量⽅法2
struct student s2 = { "张三",18,100 };
s1.age = 19;
s1.name = "李四";
s1.score = 100;
cout << s1.name << s1.age << s1.score << endl;
cout << s2.name << s2.age << s2.score << endl;
return 0;
}
定义结构体时关键字struct不可省略
定义结构体变量时关键字struct可以省略
结构体变量利⽤ . 访问成员
结构体数组
将⾃定义的结构体放⼊数组中⽅便维护
语法:struct 结构体 数组名[元素个数]={{},{},{}};
步骤:
1. 定义⼀个结构体
2. 创建⼀个结构体数组
3. 给结构体数组中元素赋值
4. 遍历结构体数组
{
string name;
int age;
int score;
};
int main()
{
struct student std[3] = { {"张三",18,80},{"李四",19,90}, {"王五",20,100} };    for (int i = 0; i < 3; i++)
{
cout << std[i].name << " " << std[i].age << " " << std[i].score << endl;    }
return 0;
}
结构体指针
作⽤通过指针访问结构体中的成员
利⽤->可以通过结构体指针访问结构体属性
#include <iostream>
using namespace std;
#include<string>
struct student
{
string name;
int age;
int score;
};
int main()
{
struct student std[3] = { {"张三",18,80},{"李四",19,90}, {"王五",20,100} };    //结构体名称本质上就是⼀个数据类型
//数组名称就是⾸地址
瓮安县国土资源局struct student* p = std;
for (int i = 0; i < 3; i++)
{
cout << (p + i)->name << (p + i)->age << (p + i)->score << endl;
}
return 0;
}
结构体嵌套结构体
作⽤:结构体中的成员可以时另⼀个结构体
需求:每个⽼师辅导三个学⽣,记录三个学⽣的结构体
{
string name;
int age;
int score;
};
struct teacher
{
string name;
int age;
student std[3];
};
2011四川高考数学
int main()
{
struct teacher t1 = { "李⽼师",50,{{"张三",18,80},{"李四",19,90},{"王五",20,100}} };
for (int i = 0; i < 3; i++)
{
cout << "指导⽼师 = " << t1.name << " "<< "⽼师年龄 = " << t1.age << " " << "指导学⽣ = " << t1.std[i].name << " " << t1.std[i].age << " " << t1.std[i].scor e << endl;
}
return 0;
}
结构体做函数参数
作⽤:将结构体作为参数向函数传递
传递⽅式:
值传递——实参不变
地址传递——实参变化
需求案例:创建⼀个函数,打印结构体,⽤值传递和地址传递分别实现摘取梦想的启明星
#include <iostream>
using namespace std;
#include<string>
struct student
{
string name;
int age;
int score;
};
//这⾥利⽤了函数重载,后⾯的知识会介绍,注意指针⽤->
void print(struct student s)
{
cout << s.name << " " << s.age << " " << s.score << endl;
}
void print(struct student* s)
{
cout << s->name << " " << s->age << " " << s->score << endl;
}
int main()
{
struct student s1 = { "张三",18,100 };
/
/注意定义指针指向的时地址内存空间,函数地址传递传的也是地址内存空间
student* p = &s1;碧玄岩
print(s1);
print(p);
return 0;
}
看打印是在主函数打印还是函数体内打印决定是使⽤值传递还是地址传递
函数重载在⽇常运⽤中及其好⽤但要注意格式统⼀(后续介绍)
结构体中const的使⽤场景
作⽤:⽤const防⽌误操作,减少数据量
我们之前谈到地址传递可以减少内存的使⽤(不⽤新开辟内存),但是⼜⾯临的实参的值会被改变,那么⽤const就可以实现既减少内存的使⽤,⼜不改变实参
#include <iostream>
using namespace std;
#include<string>
struct student
{
string name;
int age;
int score;
};
//在形参前⾯加const便可防⽌实参被改变
//地址传递减少内存使⽤,只占4个字节
void printstudent(const struct student*s)
{
cout << "学⽣姓名" << " " << s->name << " " << "学⽣年龄" << " " << s->age << " " << "学⽣成绩" << " " << s->score << endl;
}
int main()
{
struct student s1 = { "张三",18,100 };
student* p = &s1;
printstudent(p);
return 0;
合成氨变换工段
}
结构体案例
需求案例:每名⽼师带五名学⽣,总共三名⽼师
具体需求:
⽼师的结构体中,有⽼师的姓名和⼀个存放5名学⽣的结构体数组
学⽣结构体中,有姓名,考试分数
创建数组存放3个⽼师,通过函数给⽼师和学⽣赋值,并且打印出来
#include <iostream>
using namespace std;
#include<string>
//创建学⽣结构体
struct student
{
string name;
int score;
};
//创建⽼师结构体
struct teacher
{
string name;
//创建学⽣结构体数组
student std[5];
};
/
/创建添加⽼师学⽣的函数
void add(struct teacher t[], int len)
{
for (int i = 0; i < len; i++)
for (int i = 0; i < len; i++)
{
cout << "请输⼊第" << i + 1 << "个⽼师的姓名" << endl;
//输⼊⽼师名字
string name1;
cin >> name1;
t[i].name = name1;
cout << "请输⼊" << t[i].name << "带多少个学⽣" << endl;
//输⼊⽼师带的学⽣数量并且将此变量作为后续循环输⼊学⽣信息的循环节
int count;
cin >> count;
for (int j = 0; j < count; j++)
{
cout << "请输⼊" << t[i].name << "带的第" << j + 1 << "个学⽣的信息" << endl;
cout << "姓名" << endl;
string name2;
cin >> name2;
//层层访问注意【】内的是i还是j
t[i].std[j].name = name2;
cout << "分数" << endl;
int score1;
cin >> score1;
t[i].std[j].score = score1;
}
//⼀个⽼师输⼊完清空⼀次屏幕有利于⽤户体验
system("pause");
system("cls");
}
}
void print(struct teacher t[], int len)
{
for (int i = 0; i < len; i++)
{
//定义⼀个变量计算每⼀个⽼师所带的学⽣数量并作为后续循环输出的循环节
int num = sizeof(t[i].std) / sizeof(t[i].std[0]);
cout << "第" << i + 1 << "指导⽼师" << t[i].name << "=" << endl;
for (int j = 0; j < num; j++)
{
cout<<"学⽣姓名" << " " << t[i].std[j].name << "学⽣分数" << " " << t[i].std[j].score << endl;        }
}
}
int main()
{
struct teacher t[3];
//通过公式计算数组长度便于规范通⽤化
int len = sizeof(t) / sizeof(t[0]);
add(t, len);
print(t, len);
return 0;
}

本文发布于:2024-09-21 00:27:46,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/361164.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:结构   传递   地址   数组   定义   函数   循环
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议