小白学结构体
1、定义与使用
#include<iostream>
#include<string>
using namespace std;
//1 创建学生数据内型:学生包括(姓名,年龄,分数)
//自定义数据内型,一些内型集合组成的一个内型
//语法 struct 内型名称 {成员列表}
struct sb//student
{
//成员列表
//姓名
string name;
//年龄
int year;
//分数
int test;
}s3; //顺便定义不建议使用
//2 通过学生三个内型创建具体学生
int main(void)
{
//2.1 struct student s1;
//下面的struct关键字可以不写
struct sb s1;
//给s1赋值
s1.name = "张三";
s1.year = 18;
s1.test = 100;
cout<<"姓名: "<<s1.name<<" 年龄: "<<s1.year<<" 成绩: "<<s1.test<<endl;
//2.2 struct student s2 = {……}
struct sb s2 = {"小红",17,89};
cout<<"姓名: "<<s2.name<<" 年龄: "<<s2.year<<" 成绩: "<<s2.test<<endl;
//2.3 在定义结构体时顺便创建结构体变量 (不建议用)
//看main函数上面的struct
s3.name = "张四";
s3.year = 18;
s3.test = 100;
return 0;
}
2、结构体数组
#include<iostream>
#include<string>
using namespace std;
//结构体数组
//1、定义结构体
struct sd //学生缩写
{
string name; //姓名
int yesr; //年龄
int test;
}; //记得加;
int main(void)
{
//2、创建结构体数组
struct sd sdArr[2] =
{
{"张三",18,96},
{"李四",19,97}
//...
};
//3、给结构体数组中的元素赋值
sdArr[1].yesr = 17 ; //把李四的年龄改为17
//输出
for(int i = 0;i<2;i++)
{
cout<<"姓名: "<<sdArr[i].name
<<" 年龄: "<<sdArr[i].yesr
<<" 分数: "<<sdArr[i].test
<<endl;
}
return 0;
}
3、结构体指针
#include <iostream>
using namespace std;
struct Student
{
string name;
int age;
int score;
};
int main()
{
Student stu1 = {"张三", 18, 90};
Student *p = &stu1;
cout << "姓名:" << p->name << endl;
cout << "年龄:" << p->age << endl;
cout << "成绩:" << p->score << endl;
return 0;
}
# 4、结构体嵌套
```cpp
// 包含iostream头文件,使用std命名空间
#include <iostream>
using namespace std;
// 定义Student结构体,包含name、age、score三个成员变量
struct Student
{
string name;
int age;
int score;
};
// 定义Teacher结构体,包含name、age、salary、stu四个成员变量
struct Teacher
{
string name;
int age;
int salary;
Student stu;
};
// 主函数,程序从这里开始执行
int main()
{
// 定义Teacher类型的变量t1,并初始化其成员变量
Teacher t1 = {"张三", 38, 5000, {"李四", 18, 90}};
// 输出t1的成员变量
cout << "姓名:" << t1.name << endl;
cout << "年龄:" << t1.age << endl;
cout << "工资:" << t1.salary << endl;
cout << "姓名:" << t1.stu.name << endl;
cout << "年龄:" << t1.stu.age << endl;
cout << "成绩:" << t1.stu.score << endl;
// 函数返回值为0,表示程序正常结束
return 0;
}
5、结构体作为函数参数
// 结构体做函数参数
// 传递方式
// 值传递
// 指针传递
#include <iostream>
#include <string>
using namespace std;
// 定义学生结构体
struct sd
{
string name; // 名字
int age; // 年龄
int test; // 分数
};
// 输出学生基本信息函数
// 1‘值传递
void ncout(struct sd s)
{
s.name = "我"; // 只改变这次自定义函数中的输出结果
cout << "子函数中的值传递输出 " << endl
<< " 姓名: " << s.name
<< endl
<< " 年龄: " << s.age << endl
<< " 分数: " << s.test
<< endl;
}
// 地址传递(要用到指针)
void pncout(struct sd *s)
{
s->name = "你"; // 全局修改
cout << "子函数中的地址传递输出 " << endl
<< " 姓名: " << s->name
<< endl
<< " 年龄: " << s->age << endl
<< " 分数: " << s->test
<< endl;
}
int main(void)
{
// 将学生传入一个参数中 并打印
// 创建结构体变量
struct sd s;
s.name = "膝关节";
s.age = 19;
s.test = 98;
// 自定义函数输出
ncout(s); // 自定义函数,做到输出学生的基本信息
cout << endl
<< endl;
pncout(&s); // 自定义函数,做到输出学生的基本信息
cout << endl
<< endl;
// 正常的输出方式,不过我们今天要用的是自定义函数来输出这一穿
cout << "main函数中打印" << endl
<< " 姓名: " << s.name
<< endl
<< "年龄" << s.age
<< endl
<< "分数" << s.test << endl;
return 0;
//运行结果
// 子函数中的值传递输出
// 姓名: 膝关节
// 年龄: 19
// 分数: 98
//
// 子函数中的地址传递输出
// 姓名: 你
// 年龄: 19
// 分数: 98
//
// main函数中打印
// 姓名: 膝关节
// 年龄: 19
// 分数: 98
}
本文的所有源码都在[我的github](https://github.com/ababll5/blog_cpp)里