本文主要是介绍实验C语言“union”的最基础语法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目标
最近在看Rust的“菜鸟教程”,看到 Rust 枚举类 时我发现它所定义的“枚举类”虽然也能像C语言枚举类那样使用,但是多了些功能:对于某个枚举的成员,还可以附带独特的数据,这让我想起了C语言中的union
。
而我事实上对union
没有使用经验,我自己写程序的时候不用它,看其他的项目的程序时印象里也没见过它。所以我对union
的设计意图理解不深(可能只是为了节省内存?)。本篇的目标是对其基础的语法做一些实验,参考了 《C 共用体 | 菜鸟教程》
实验
由于其语法上和struct
,我将与其对比实验,代码如下:
#include<iostream>
using namespace std;struct MyStruct //对比测试的struct
{int i;float f;char str[8];
};union MyUnion //测试的union
{int i;float f;char str[8];
};int main()
{MyStruct TestStruct;MyUnion TestUnion;//测试size:cout << "TestStruct的size:" << sizeof(TestStruct) << endl;cout << "TestUnion的size:" << sizeof(TestUnion) << endl;//对比测试TestStruct赋值:{TestStruct.i = 3;TestStruct.f = 6.9;strcpy_s(TestStruct.str, "Hello");cout << "i的值:" << TestStruct.i << endl;cout << "f的值:" << TestStruct.f << endl;cout << "str的值:" << TestStruct.str << endl;}//测试TestUnion赋值:{TestUnion.i = 3;TestUnion.f = 6.9;strcpy_s(TestUnion.str, "Hello");cout << "i的值:" << TestUnion.i << endl;cout << "f的值:" << TestUnion.f << endl;cout << "str的值:" << TestUnion.str << endl;}
}
以上程序将输出:
TestStruct的size:16
TestUnion的size:8
i的值:3
f的值:6.9
str的值:Hello
i的值:1819043144
f的值:1.14314e+27
str的值:Hello
以上代码完成了两个测试:
- 对于相同成员的
struct
和union
,其size是不一样的,union
的size将是其所有成员中最大成员的size。因为其一次只有一个成员是起效的。 - 重新对
union
赋值将会使之前的值失效,从上面输出可以看到,union
的值最终只有str是正确的,i和f的值都是错误的。
这篇关于实验C语言“union”的最基础语法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!