C 语法复习 union

今天看php源码看到 zval 结构里的 zvalue_value 是由 union 实现的,之前没有用过这个关键词,所以来学一下。

union 百度百科定义

union 是数据的一种构造类型的数据结构。也就是说它和struct类似。

第一个问题

它和struct的区别的在哪里?

struct 结构体变量中的每个成员各自占用一段内存互不干扰(举个例子,四个人租了一个房子,都比较穷哈,但是有隔断,每个人使用自己的空间对别的成员不造成影响)

union结构体变量中的所有成员公用一段内存,同一时间段只能存贮一个成员变量(四个人租了一个房间的不同时间段,还是摆脱不了穷的命运哈,一个人入住后,别的成员就得等这个人使用完后才能进,当第二个成员进来后要放自己的东西,所以原先第一个成员的所有东西都会被扔掉)。

附实验代码 C 实现

#include <stdio.h>

int main()
{
    union name
    {
        char *a;
        int b;
        // double c;
    }xiaohong;

    xiaohong.a = "hello world";
    // xiaohong.c = 0.11;
    printf("a:%s,b:%d.\n", xiaohong.a, xiaohong.b);
    // xiaohong.b = 11;
    // printf("a:%s,b:%d.\n", xiaohong.a, xiaohong.b);
    return 0;
}

 还有疑问尚未解开

假设有一联合体A 有成员a,b  当给a赋值后,此时b的值是多少(经上面的实验b的值是有的但是我没有给b赋值),此时b的值代表的是b的地址还是什么?


union和struct结合使用的例子(下面的例子编译不通过,找不到原因,备忘一下)

#include <stdio.h>
void main()
{
  union number
  {
        /*定义一个联合*/
      int i;
      struct
      {
            /*在联合中定义一个结构*/
          char first;
          char second;
      }half;
  }num;

  num.i=0x4241; /*联合成员赋值*/
  printf("%c%c\n", num.half.first, num.half.second);
  num.half.first='a'; /*联合中结构成员赋值*/
  num.half.second='b';
  printf("%x\n", num.i);
  getchar();
}


你可能感兴趣的:(C 语法复习 union)