C语言 共用体(Union)详解及示例代码
介绍共用体(Union)
共用体(Union)是一种特殊的数据类型, 它可以在相同的内存位置存储不同的数据类型。 同时,共用体的长度只能是其中最长成员的长度。
定义共用体
共用体的定义方式与结构体类似,只是将关键字struct
换成了union
。
union union_name {
member1_type member1_name;
member2_type member2_name;
...
};
其中,union_name
为共用体的名字;member-type
与member_name
为表示共用体成员类型与名称的标识符。
访问共用体成员
跟结构体一样,使用.
运算符访问结构体成员。但是,共用体的所有成员都存在于同一块内存中,因此占用的内存空间是相同的。在读写共用体时,要注意只访问当前所需要的成员。
共用体示例
以下是两个共用体示例:
示例1:一个共用体定义两个类型,其中一个成员包含一个字符串,另一个成员包含一个整数。
#include <stdio.h>
#include <string.h>
union shared_data {
int num;
char str[20];
};
int main() {
union shared_data data;
data.num = 2022;
printf("data.num = %d\n", data.num);
strcpy(data.str, "hello");
printf("data.str = %s\n", data.str);
printf("data.num = %d\n", data.num);
return 0;
}
输出结果:
data.num = 2022
data.str = hello
data.num = 1819043144
在上面的代码中,我们定义了一个共用体shared_data
,其中有一个整型成员num
和一个字符数组成员str
。我们首先将data.num
赋值为2022
,然后将字符串"hello" 拷贝到data.str
中。最后,我们再次输出data.num
的值,可以发现其值已被修改。
示例2:一个共用体同时存储一个浮点数和一个整数
#include <stdio.h>
union float_or_int {
float f;
int i;
};
int main() {
union float_or_int u;
u.f = 3.14;
printf("u.f = %f, u.i = %d\n", u.f, u.i);
u.i = 1024;
printf("u.f = %f, u.i = %d\n", u.f, u.i);
return 0;
}
输出结果:
u.f = 3.140000, u.i = 1078523331
u.f = 0.000000, u.i = 1024
在这个例子中,共用体float_or_int
同时储存了一个浮点数和一个整数。我们首先将浮点数赋值为3.14,然后输出共用体成员u.f
和u.i
的值。可以看到,浮点数的值以及对应的二进制值都被正确地记录下来。接着,我们将u.i
赋值为1024,然后再次输出共用体成员的值。这次,浮点数的值变成了0.0,因为它的内部二进制表示被改变了。
总结
共用体是C语言内置的强大数据类型,在某些情况下可以提高程序的运行效率和编码的灵活性。同时,使用共用体时需要注意各成员的内存布局以及潜在的数据类型问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 共用体(Union)详解及示例代码 - Python技术站