芯源半导体CW32
直播中

而无返还

9年用户 1320经验值
擅长:光电显示
私信 关注
[经验]

共用体声明

共用体也称联合体。

和结构体还是有点像:


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


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


  • //Example 05
  • #include
  • #include

  • 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: %dn", test.i);
  • printf("test.pi: %.2fn", test.pi);
  • printf("test.str: %sn", 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;




更多回帖

发帖
×
20
完善资料,
赚取积分