第八课 结构体
8.1结构体基本概念
结构体属于用户自定义类型,允许用户储存不同类型的程序。
8.2结构体定义和使用
语法:struct 结构体名 {结构体成员};
通过结构体创建变量方式(三种):
- struct 结构体名 变量名
// 定义结构体
struct student
{
// 成员列表
string name;
int age;
int score;
};
int main()
{
struct student s1;
s1.name = "新之助";
s1.age = 5;
s1.score = 66;
}
- struct 结构体名 变量名 = {成员1值, 成员2值...}
// 定义结构体
struct student
{
// 成员列表
string name;
int age;
int score;
};
int main()
{
struct student s1 = {"新之助",5,66};
cout << s1.name << " " << s1.age << " " << s1.score << endl;
}
- 定义结构体时顺便创建变量
struct student
{
// 成员列表
string name;
int age;
int score;
}s1;
int main()
{
s1.name = "新之助";
s1.age = 5;
s1.score = 66;
cout << s1.name << " " << s1.age << " " << s1.score << endl;
}
注意:创建结构体变量时,关键字可以省略 student s1 = {"新之助",5,66};
8.3结构体数组
作用:将自定义的结构体放入数组中方便维护
语法:struct 结构体名 数组名[元素个数] = { {},{}... }
struct student
{
// 成员列表
string name;
int age;
int score;
}s1;
int main()
{
student arr[] = {
{"新之助",5,66},
{"风间",5,99},
{"阿呆",5,80}
};
for(int i=0;i<3;i++)
{
cout << arr[i].name << " " << arr[i].age << " " << arr[i].score <<endl;
}
}
8.4结构体指针
作用:通过指针访问结构体中成员
利用操作符 -> 通过结构体指针访问结构体属性
int main()
{
struct student s1 = {"新之助",5,66};
student * p = &s1;
cout << p->name << " " << p->age << " " << p->score << endl; //p[i]结构体对象 p是指向结构体student的指针
}
8.5结构体嵌套结构体
结构体中的成员可以是另一个结构体
struct student
{
string name;
int age;
int score;
};
struct techer
{
string name;
int id;
int age;
struct student stu;
};
8.6结构体做函数参数
作用:将结构体作为参数像函数中传递
- 值传递
- 地址传递
void printStudent1(struct student s)
{
s.name = "野原向日葵";
cout << "函数1 " << s.name << " " << s.age << " " << s.score << endl;
}
void printStudent2(struct student * p)
{
p->score = 100;
cout << "函数2 " << p->name << " " << p->age << " " << p->score << endl;
}
int main()
{
student s1 = {"新之助", 5, 66};
student *p = &s1;
printStudent1(s1);
printStudent2(p);
cout << p->name << " " << p->age << " " << p->score << endl; // p[i]结构体对象 p是指向结构体student的指针
}
8.7结构体中使用const
// 将函数的形参改为指针,可以减少内存空间(因为存的是地址),不会复制新的副本出来
void printStudent2(const struct student * p)
{
// p->score = 100;
cout << "函数2 " << p->name << " " << p->age << " " << p->score << endl;
}
int main()
{
student s1 = {"新之助", 5, 66};
student *p = &s1;
printStudent1(s1);
printStudent2(p);
cout << p->name << " " << p->age << " " << p->score << endl; // p[i]结构体对象 p是指向结构体student的指针
}

浙公网安备 33010602011771号