打印
[产品应用]

共用体的声明

[复制链接]
614|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szt1993|  楼主 | 2024-4-7 17:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


共用体也称联合体。

和结构体还是有点像:

union 共用体名称
{
    成员1;
    成员2;
    成员3;
};

但是两者有本质的不同。共用体的每一个成员共用一段内存,那么这也就意味着它们不可能同时被正确地访问。如:

//Example 05
#include <stdio.h>
#include <string.h>

union Test
{
int i;
double pi;
char str[9];
};

int main(void)
{
union Test test;

test.i = 10;
test.pi = 3.14;
strcpy(test.str, "TechZone");

printf("test.i: %d\n", test.i);
printf("test.pi: %.2f\n", test.pi);
printf("test.str: %s\n", test.str);

return 0;
}

执行结果如下:

//Consequence 05
test.i: 1751344468
test.pi: 3946574856045802736197446431383475413237648487838717723111623714247921409395495328582015991082102150186282825269379326297769425957893182570875995348588904500564659454087397032067072.00
test.str: TechZone

可以看到,共用体只能正确地展示出最后一次被赋值的成员。共用体的内存应该要能够满足最大的成员能够正常存储。但是并不一定等于最大的成员的尺寸,因为还要考虑内存对齐的问题。

共用体可以类似结构体一样来定义和声明,但是共用体还可以允许不带名字:


union
{
int i;
char ch;
float f;
} a, b;

使用特权

评论回复
沙发
中国龙芯CDX| | 2024-4-10 12:12 | 只看该作者
共用体可以类似结构体一样来定义和声明,但是共用体还可以允许不带名字

使用特权

评论回复
板凳
小夏天的大西瓜| | 2024-4-11 16:52 | 只看该作者
共用体的大概用法其实和结构体差不多,细节上稍微有些注意点就好

使用特权

评论回复
地板
jf101| | 2024-4-14 14:26 | 只看该作者
共用体的声明其实与结构体类似

使用特权

评论回复
5
小小蚂蚁举千斤| | 2024-4-15 10:15 | 只看该作者
共用体使用的比较少,一般结构体用的比较多

使用特权

评论回复
6
OKAKAKO| | 2024-4-19 18:42 | 只看该作者
共用体也称联合体,和结构体还是有点像!

使用特权

评论回复
7
星辰大海不退缩| | 2024-4-21 12:28 | 只看该作者
正常使用结构体就可以了

使用特权

评论回复
8
szt1993|  楼主 | 2024-7-22 13:33 | 只看该作者
小小蚂蚁举千斤 发表于 2024-4-15 10:15
共用体使用的比较少,一般结构体用的比较多

实际上是结构体使用的比较多,其实对于底层来说大家都差不多

使用特权

评论回复
9
LOVEEVER| | 2024-8-12 17:03 | 只看该作者
联合体和结构体其实都是差不多的

使用特权

评论回复
10
szt1993|  楼主 | 2024-8-14 22:15 | 只看该作者
其实大家一般用的比较少,这个知识了解其实就好

使用特权

评论回复
11
小夏天的大西瓜| | 2024-8-21 15:11 | 只看该作者
共用体的每一个成员共用一段内存,那么这也就意味着它们不可能同时被正确地访问。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

267

主题

2254

帖子

4

粉丝