结构体

1.结构体定义和使用

  • 语法:struct 结构体名 { 结构体成员列表 };

  • 通过结构体创建变量的方式

    (1) struct 结构体名 变量名

    (2) struct 结构体名 变量名 = { 成员1值,成员2值…. };

    (3) 定义结构体时顺便定义结构体变量

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
#include <cstring>
using namespace std;
struct student
{
string name;
int age;
}stu3;//定义结构体时顺便定义结构体变量
int main() {
//(1) struct 结构体名 变量名
struct student stu1;
stu1.age = 19;
stu1.name = "hanxiaoxuan";
cout << "stu1的信息:" << endl;
cout << "name:" << stu1.name << "\tage:" << stu1.age << endl;
//(2) struct 结构体名 变量名 = { 成员1值,成员2值.... };
struct student stu2 = { "hxx",19 };
cout << "stu2的信息:" << endl;
cout << "name:" << stu2.name << "\t\tage:" << stu2.age << endl;

//(3) 定义结构体时顺便定义结构体变量
stu3.age = 20;
stu3.name = "hhh";
cout << "stu3的信息:" << endl;
cout << "name:" << stu3.name << "\t\tage:" << stu3.age << endl;
return 0;
}

运行结果:

1
2
3
4
5
6
stu1的信息:
name:hanxiaoxuan age:19
stu2的信息:
name:hxx age:19
stu3的信息:
name:hhh age:20

2. 结构体数组

  • 作用:将自定义的结构体放入到数组中方便维护
  • 语法:struct 结构体名 数组名[元素个数] = { {},{},{}…. };

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<cstring>
using namespace std;
struct student
{
string name;
int age;
};
int main() {
struct student arr[2] =
{
{"hxx",19},
{"hxs",20}
};
for (int i = 0;i < 2;i++) {
cout << "学生" << arr[i].name << "的年龄是" << arr[i].age << endl;
}
return 0;
}

运行结果:

1
2
学生hxx的年龄是19
学生hxs的年龄是20

3. 结构体指针

  • 作用:通过指针访问结构体中的成员
  • 利用 -> 操作符,可以通过结构体指针访问结构体属性

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<cstring>
using namespace std;
struct student
{
string name;
int age;
};
int main() {
student arr[2] =
{
{"hxx",19},
{"hxs",20}
};
student* p = arr;
for (int i = 0;i < 2;i++) {
cout << "学生" << p->name << "的年龄是" << p->age << endl;
p++;
}
return 0;
}

运行结果:

1
2
学生hxx的年龄是19
学生hxs的年龄是20

4. 结构体嵌套结构体

  • 作用:结构体中的成员可以是另一个结构体

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream>
#include<cstring>
using namespace std;
struct student
{
string name;
int age;
};
struct teacher
{
int id;
string name;
int age;
struct student stu;
};
int main() {
teacher t;
t.id = 1000;
t.name = "老王";
t.age = 45;
t.stu.age = 19;
t.stu.name = "小王";
cout << "老师姓名:" << t.name << " 老师编号:" << t.id<< "老师年龄:" << t.age
<< "\n辅导的学生姓名:" << t.stu.name << "年龄:" << t.stu.age << endl;
return 0;
}

运行结果:

1
2
老师姓名:老王 老师编号:1000老师年龄:45
辅导的学生姓名:小王年龄:19

5. 结构体做函数参数

  • 作用:将结构体作为参数向函数中传递
  • 传递方式:值传递、地址传递

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include<cstring>
using namespace std;
struct student
{
int age;
string name;
};
void print(student s);
void print1(const student* p);//将函数中的形参改为指针,可以减少内存,而且不会复制一个新的副本
int main() {
student stu;
stu.age = 19;
stu.name = "韩晓璇";
//值传递
print(stu);
cout << "在main函数中打印 姓名:" << stu.name << "年龄:" << stu.age << endl;
//地址传递
print1(&stu);
cout << "在main函数中打印 姓名:" << stu.name << "年龄:" << stu.age << endl;
return 0;
}
void print(student s) {
s.age = 22;
cout << "在子函数中打印 姓名:" << s.name << "年龄:" << s.age << endl;
}
void print1(const student* p) {
//p->age = 22;//加入const之后,一旦修改就会报错,防止误操作
cout << "在子函数2中打印 姓名:" << p->name << "年龄:" << p->age << endl;
}

运行结果:

1
2
3
4
在子函数中打印 姓名:韩晓璇年龄:22
在main函数中打印 姓名:韩晓璇年龄:19
在子函数2中打印 姓名:韩晓璇年龄:22
在main函数中打印 姓名:韩晓璇年龄:22