0%

C++PrimerPlus_4.5共用体union

共用体(union)是一种数据格式。

它能存储不同的数据类型,但只能同时存储其中一种类型

共用体的用途是当数据类型可能是1种或者是更多种格式(但不同时使用)时,可节省空间。

🌰例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>

int main() {
using namespace std;

union one4all
{
int int_val;
long long_val;
double double_val;
};

one4all pail;
pail.int_val = 15;
cout << pail.int_val << endl;
pail.double_val = 12.05;
cout << pail.double_val << endl;
cout << pail.int_val << endl; // 输出-1717986918,代表无法输出
return 0;
}

🌰 例子2:

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
34
35
36
37
38
39
40
41

int main() {
using namespace std;
struct widget
{
char brand[20];
int type;

union id
{
long id_num;
char id_char[20];
} id_val;
};

widget prize;

prize.brand[0] = 'z';
cout << "Please enter prize type, 1 or 2 \n";
cin >> prize.type;

// prize.type = 1;
// prize.id_val.id_num = 1;
// prize.id_val.id_char[0] = 'h';

if (prize.type == 1)
{ // 要用打括号括起来,假如if里有几行的话
cout << "Please enter prize.id_val in int \n";
cin >> prize.id_val.id_num;
cout << "Prize.id_val is " << prize.id_val.id_num << endl;
}
else
{
cout << "Please enter prize.id_val in char \n";
cin >> prize.id_val.id_char;
cout << "Prize.id_val is " << prize.id_val.id_char << endl;
}

return 0;
}

-------------本文结束感谢您的阅读-------------