c 语言 union 用法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言中的union用法
什么是union?
在C语言中,union是一种特殊的数据类型,它允许在同一块内存空间中存储不同
类型的数据。

与结构体(struct)不同,union只能同时存储一个成员的值。

这意
味着union的大小将取决于其最大成员的大小。

声明和定义一个union
要声明和定义一个union,可以使用union关键字,后跟对应的标识符。

下面是一
个示例:
union MyUnion {
int i;
float f;
char c;
};
在上面的例子中,我们声明了一个名为MyUnion的联合体,它有三个成员:整型i、浮点型f和字符型c。

使用union
访问联合体成员
要访问联合体中的成员,可以使用.运算符。

但是需要注意的是,只能访问最后一
次赋值给联合体的成员。

#include <stdio.h>
int main() {
union MyUnion u;
u.i = 10;
printf("i: %d\n", u.i);
u.f = 3.14;
printf("f: %f\n", u.f);
printf("i: %d\n", u.i); // 输出结果可能会与预期不符
return 0;
}
在上面的示例中,我们首先将整数值10赋给联合体的整型成员i,然后打印出它的值。

接下来,我们将浮点数值3.14赋给联合体的浮点型成员f,并再次打印出i 的值。

由于最后一次赋值是浮点型,因此在第二个打印语句中,会输出一个不确定的值。

联合体的大小
联合体的大小取决于其最大成员的大小。

在上面的示例中,整型和浮点型都是4个字节,因此联合体MyUnion的大小为4个字节。

联合体作为结构体成员
联合体可以作为结构体(struct)的成员使用。

这样可以在同一块内存空间中存储不同类型的数据,并且可以根据需要访问相应类型。

#include <stdio.h>
union MyUnion {
int i;
float f;
char c;
};
struct MyStruct {
int x;
union MyUnion u;
};
int main() {
struct MyStruct s;
s.x = 10;
printf("x: %d\n", s.x);
s.u.f = 3.14;
printf("f: %f\n", s.u.f);
printf("x: %d\n", s.x); // 输出结果可能会与预期不符
return 0;
}
在上面的示例中,我们声明了一个名为MyStruct的结构体,它有两个成员:整型x和联合体u。

我们首先将整数值10赋给x,然后将浮点数值3.14赋给联合体u
的浮点型成员f,并打印出x的值。

由于最后一次赋值是浮点型,因此在第二个打
印语句中,会输出一个不确定的值。

联合体的应用
联合体在某些情况下非常有用,特别是当需要在不同数据类型之间进行转换时。

例如,可以使用联合体来实现简单的类型转换函数。

#include <stdio.h>
union Convert {
int i;
float f;
};
float intToFloat(int x) {
union Convert c;
c.i = x;
return c.f;
}
int floatToInt(float x) {
union Convert c;
c.f = x;
return c.i;
}
int main() {
int a = 10;
float b = 3.14;
printf("intToFloat: %f\n", intToFloat(a));
printf("floatToInt: %d\n", floatToInt(b));
return 0;
}
在上面的示例中,我们定义了一个名为Convert的联合体,它有两个成员:整型i
和浮点型f。

然后我们定义了两个函数:intToFloat和floatToInt。

这些函数使
用了Convert联合体来实现整型到浮点型和浮点型到整型的转换。

总结
本文介绍了C语言中union的用法。

union允许在同一块内存空间中存储不同类型
的数据,并且可以根据需要访问相应类型。

我们了解了如何声明和定义一个union,
以及如何访问union的成员。

此外,我们还了解了联合体作为结构体成员的用法,以及联合体在类型转换中的应用。

希望本文能对你理解和使用union有所帮助。

相关文档
最新文档