C 語(yǔ)言基礎(chǔ)教程

C 語(yǔ)言流程控制

C 語(yǔ)言函數(shù)

C 語(yǔ)言數(shù)組

C 語(yǔ)言指針

C 語(yǔ)言字符串

C 語(yǔ)言結(jié)構(gòu)體

C 語(yǔ)言文件

C 其他

C 語(yǔ)言參考手冊(cè)

C 語(yǔ)言共用體(Union)

在本教程中,您將學(xué)習(xí)C語(yǔ)言編程中的共用體。更具體地說(shuō),如何創(chuàng)建共用體(聯(lián)合體),訪問(wèn)其成員以及了解共用體與組織之間的差異。共用體又被稱(chēng)為聯(lián)合體, 和結(jié)構(gòu)體同屬于C語(yǔ)言數(shù)據(jù)類(lèi)型中的結(jié)構(gòu)類(lèi)型。

共用體是一種特殊的數(shù)據(jù)類(lèi)型,允許您在相同的內(nèi)存位置存儲(chǔ)不同的數(shù)據(jù)類(lèi)型。您可以定義一個(gè)帶有多成員的共用體,但是任何時(shí)候只能有一個(gè)成員帶有值。共用體提供了一種使用相同的內(nèi)存位置的有效方式。

union也是一種用戶(hù)定義的類(lèi)型,類(lèi)似于C中的struct,除了一個(gè)關(guān)鍵字的區(qū)別。結(jié)構(gòu)體分配足夠的空間存儲(chǔ)其所有成員,而共用體分配空間僅存儲(chǔ)最大的成員。

如何定義共用體?

我們使用union關(guān)鍵字定義共用體。這是一個(gè)實(shí)例:

union car
{
  char name[50];
  int price;
};

上面的代碼定義了派生類(lèi)型union car。

創(chuàng)建union變量

定義共用體后,它將創(chuàng)建用戶(hù)定義的類(lèi)型。但是,沒(méi)有分配內(nèi)存。要為給定的聯(lián)合類(lèi)型分配內(nèi)存并使用它,我們需要?jiǎng)?chuàng)建變量。

這是我們創(chuàng)建聯(lián)合變量的方法。

union car
{
  char name[50];
  int price;
};

int main()
{
  union car car1, car2, *car3;
  return 0;
}

創(chuàng)建聯(lián)合變量的另一種方法是:

union car
{
  char name[50];
  int price;
} car1, car2, *car3;

在這兩種情況下,都會(huì)創(chuàng)建union car類(lèi)型的union變量car1、car2和union指針car3。

訪問(wèn)共用體成員

我們使用.運(yùn)算符來(lái)訪問(wèn)共用體的成員。要訪問(wèn)指針變量,我們還使用->運(yùn)算符。

在上面的示例中,

  • 要訪問(wèn)car1的價(jià)格(price),請(qǐng)使用car1.price。

  • 要訪問(wèn)car3的價(jià)格(price),可以使用(* car3).price或car3-> price。

共用體與結(jié)構(gòu)體之間的區(qū)別

讓我們以一個(gè)實(shí)例來(lái)說(shuō)明共用體與結(jié)構(gòu)體之間的區(qū)別:

#include <stdio.h>
union unionJob
{
   //定義 union
   char name[32];
   float salary;
   int workerNo;
} uJob;

struct structJob
{
   char name[32];
   float salary;
   int workerNo;
} sJob;

int main()
{
   printf("union 的大小 = %d 字節(jié)", sizeof(uJob));
   printf("\nstruct 的大小 = %d 字節(jié)", sizeof(sJob));
   return 0;
}

輸出結(jié)果

union 的大小 = 32 字節(jié)
structure 的大小  = 40 字節(jié)

為什么聯(lián)合變量和結(jié)構(gòu)變量的大小存在這種差異?

在這里,sJob大小為40個(gè)字節(jié),因?yàn)?/p>

  • name[32]的大小是32個(gè)字節(jié)

  • salary的大小是4個(gè)字節(jié)

  • workerNo的大小是4個(gè)字節(jié)

但是,uJob大小為32個(gè)字節(jié)。這是因?yàn)槁?lián)合變量的大小將始終是其最大元素的大小。在上面的示例中,其最大元素(name[32])的大小為32個(gè)字節(jié)。

使用共用體,所有成員共享相同的記憶。

示例:訪問(wèn)共用體會(huì)員

#include <stdio.h>
union Job {
   float salary;
   int workerNo;
} j;

int main() {
   j.salary = 12.3;

    //當(dāng)j.workerNo被賦值時(shí),
    // j.salary將不再保留12.3
   j.workerNo = 100;

   printf("薪水 = %.1f\n", j.salary);
   printf("工人人數(shù) = %d", j.workerNo);
   return 0;
}

輸出結(jié)果

薪水 = 0.0
工人人數(shù) = 100
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清