结构体属于用户自定义的数据类型,允许用户存储不同的数据类型
语法: struct 结构体名 {结构体成员列表};
通过结构体创建变量的方式有三种:
? ? ? ? 1、struct 结构体名 变量名
? ? ? ? 2、struct 结构体名 变量名={成员1值,成员2值};
? ? ? ? 3、定义结构体的时候顺便创建变量
作用:将自定义的结构体放入到数组中方便维护
语法: struct 结构体名 数组名[元素个数] ={{},{},.....{}}
作用:通过指针访问结构体中的成员
? ? ? ? 利用操作符->可以通过结构体指针访问结构体属性
#include <iostream>
using namespace std;
//定义学生的结构体
struct student
{
string name; //姓名
int age; //年龄
int score; //分数
};
int main()
{
//创建学生的结构体变量
struct student s = {"张三",18,99};
//通过指针指向结构体变量
struct student* p = &s;
//通过指针访问结构体变量中的数据
cout << "姓名" << p->name << "年龄" << p->age << "分数" << p->score << endl;
system("pause");
return 0;
}
作用:结构体中的成员可以是另一个结构体
#include <iostream>
using namespace std;
//定义学生的结构体
struct student
{
string name; //姓名
int age; //年龄
int score; //分数
};
//定义老师结构体
struct teacher
{
int id; //教师编号
string name; //教师姓名
int age; //年龄
struct student stu; //辅导的学生
};
int main()
{
//结构体嵌套结构体
teacher t;
t.id = 10000;
t.name = "老曹";
t.age = 55;
t.stu.name = "小张";
t.stu.age = 22;
t.stu.score = 85;
cout << "教师编号" << t.id << " 教师姓名:" << t.name << " 教师年龄" << t.age
<< " 辅导的学生姓名" << t.stu.name << " 学生年龄" << t.stu.age << " 学生分数" << t.stu.score << endl;
system("pause");
return 0;
}
作用:将结构体作为参数向函数中传递
传递方式两种:
? ? ? ? 1、值传递
? ? ? ? 2、地址传递
本例子是值传递? 地址传递可以加上取地址符号
#include <iostream>
using namespace std;
//定义学生的结构体
struct student
{
string name; //姓名
int age; //年龄
int score; //分数
};
//结构体做函数的参数
void printf_student(student stu)
{
cout << "子函数中打印 姓名" << stu.name << " 年龄" << stu.age << " 分数" << stu.score << endl;
}
int main()
{
student s;
s.name = "张三";
s.age = 20;
s.score = 85;
printf_student(s);
system("pause");
return 0;
}
作用:用const来防止误操作
也就是防止被修改