C++结构体联合体
# 总述
之前了解过 int,char,bool,loog 等基础类型,结构体和联合体 都是C++继承兼容C的一种自定义类型的方式。
结构体 (struct): 将几个变量的内存组合在一起;长度为所有变量长度之和。
联合体 (union): 让几个变量使用同一段内存;长度为内存占用最大的参数。
值得注意的是:这里的变量,可以是基础类型,也可是自定义类型。
# 结构体 (struct)
一般形式:
struct 结构体名称
{
结构体
};
1
2
3
4
2
3
4
举例:定义一个同学类型,并使用
#include <iostream>
#include <cstring>
using namespace std;
// 声明结构体 Student
struct Student
{
char name[20]; // 姓名
int age; // 年龄
double height; // 身高 cm
double weight; // 体重 kg
};
int main(int argc, char* argv[])
{
Student a; // 定义同学:a
strcpy(a.name, "小红");
a.age = 4;
a.height = 100;
a.weight = 20.03;
cout << "姓名:" << a.name << endl;
cout << "年龄:" << a.age << endl;
cout << "身高:" << a.height << endl;
cout << "体重:" << a.weight << endl;
return 0;
}
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
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
结果:
姓名:小红
年龄:4
身高:100
体重:20.03
我们还可以在声明结构体的同时去定义对象:
struct 结构体名称
{
结构体
} 变量名1, 变量名2 ... 变量名n;
1
2
3
4
2
3
4
例:
// 声明结构体 Student
struct Student
{
char name[20]; // 姓名
int age; // 年龄
double height; // 身高 cm
double weight; // 体重 kg
} a; // 定义全局对象 同学:a
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 联合体 (union)
一般形式:
union 结构体名称
{
结构体
};
1
2
3
4
2
3
4
这里也支持同时去定义对象:
union 结构体名称
{
结构体
} 变量名1, 变量名2 ... 变量名n;
1
2
3
4
2
3
4
联合体会几个变量使用同一段内存,可结合下面一段代码理解。
例:给以上同学类型再加一个学号
#include <iostream>
#include <cstring>
using namespace std;
// 声明结构体 Student
struct Student
{
int num; // 学号
char name[20]; // 姓名
int age; // 年龄
double height; // 身高 cm
double weight; // 体重 kg
};
union StudentU
{
Student student;
int key;
};
int main(int argc, char* argv[])
{
StudentU a; // 定义同学:a
a.student.num = 101; // 学号为1
strcpy(a.student.name, "小红");
a.student.age = 4;
a.student.height = 100;
a.student.weight = 20.03;
cout << "关键值:" << a.key << endl;
return 0;
}
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
31
32
33
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
31
32
33
结果:
关键值:101
可以看到我们没有对 key 赋值,但是 key 里面存了我们想要的东西;取的是num对应的内存中的值。
联合体多用于网络编程,如果希望做相关开发工作,可以看看理解相关概念。
编辑 (opens new window)
上次更新: 2023/04/09, 07:45:01