C 语法复习 union

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

union 百度百科定义
数据结构

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

第一个问题
code

它和struct的区别的在哪里?内存

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

union结构体变量中的全部成员公用一段内存,同一时间段只能存贮一个成员变量(四我的租了一个房间的不一样时间段,仍是摆脱不了穷的命运哈,一我的入住后,别的成员就得等这我的使用完后才能进,当第二个成员进来后要放本身的东西,因此原先第一个成员的全部东西都会被扔掉)。源码

附实验代码 C 实现
io

#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的地址仍是什么?
class


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();
}
相关文章
相关标签/搜索