[产品应用] 共用体的声明

[复制链接]
1085|10
 楼主| szt1993 发表于 2024-4-7 17:28 | 显示全部楼层 |阅读模式


共用体也称联合体。

和结构体还是有点像:

  1. union 共用体名称
  2. {
  3.     成员1;
  4.     成员2;
  5.     成员3;
  6. };

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

  1. //Example 05
  2. #include <stdio.h>
  3. #include <string.h>

  4. union Test
  5. {
  6. int i;
  7. double pi;
  8. char str[9];
  9. };

  10. int main(void)
  11. {
  12. union Test test;

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

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

  19. return 0;
  20. }

执行结果如下:

  1. //Consequence 05
  2. test.i: 1751344468
  3. test.pi: 3946574856045802736197446431383475413237648487838717723111623714247921409395495328582015991082102150186282825269379326297769425957893182570875995348588904500564659454087397032067072.00
  4. test.str: TechZone

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

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


  1. union
  2. {
  3. int i;
  4. char ch;
  5. float f;
  6. } a, b;
中国龙芯CDX 发表于 2024-4-10 12:12 | 显示全部楼层
共用体可以类似结构体一样来定义和声明,但是共用体还可以允许不带名字
小夏天的大西瓜 发表于 2024-4-11 16:52 | 显示全部楼层
共用体的大概用法其实和结构体差不多,细节上稍微有些注意点就好
jf101 发表于 2024-4-14 14:26 | 显示全部楼层
共用体的声明其实与结构体类似
小小蚂蚁举千斤 发表于 2024-4-15 10:15 | 显示全部楼层
共用体使用的比较少,一般结构体用的比较多
OKAKAKO 发表于 2024-4-19 18:42 | 显示全部楼层
共用体也称联合体,和结构体还是有点像!
星辰大海不退缩 发表于 2024-4-21 12:28 | 显示全部楼层
正常使用结构体就可以了
 楼主| szt1993 发表于 2024-7-22 13:33 | 显示全部楼层
小小蚂蚁举千斤 发表于 2024-4-15 10:15
共用体使用的比较少,一般结构体用的比较多

实际上是结构体使用的比较多,其实对于底层来说大家都差不多
LOVEEVER 发表于 2024-8-12 17:03 | 显示全部楼层
联合体和结构体其实都是差不多的
 楼主| szt1993 发表于 2024-8-14 22:15 | 显示全部楼层
其实大家一般用的比较少,这个知识了解其实就好
小夏天的大西瓜 发表于 2024-8-21 15:11 | 显示全部楼层
共用体的每一个成员共用一段内存,那么这也就意味着它们不可能同时被正确地访问。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

350

主题

3021

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部