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();
}
相關文章
相關標籤/搜索