C程式中結構體和聯合體的區別


C語言中,我們有容器可以儲存相同資料型別以及不同資料型別的資料。C語言提供陣列的概念來儲存相同型別的資料變數;而對於儲存不同型別的資料,C語言提供了結構體聯合體的概念。

結構體和聯合體都可以容納不同型別的資料,但根據它們內部的實現方式,我們可以在兩者之間找到一些差異。閱讀本文以瞭解更多關於結構體和聯合體以及它們之間區別的資訊。

什麼是C程式中的結構體?

在C語言程式設計中,結構體是一種使用者自定義的資料型別。它主要用於將不同的資料型別組合成單個數據型別。C程式中的結構體可以包含多個成員和結構體變數。為了定義結構體,使用'struct'關鍵字。要訪問結構體的成員,我們使用點(.)運算子

語法

C語言中結構體的語法如下:

struct structure_name {
   member definition;
} structure_variables;

其中,

  • structure_name 是賦予結構體的名稱。

  • member definition 是成員變數的集合。

  • structure_variable 是結構體的物件。

示例

#include <stdio.h>

struct book {
   char title[10];
   double price;
};

int main() {
   struct book book1 = {"C book", 800.12};

   printf("Title:  %s 
", book1.title); printf("Price: %lf
", book1.price); printf("Size of book struct: %lu", sizeof(struct book)); return 0; }

當您執行此程式時,輸出將如下所示:

Title:  C book 
Price:  800.120000
Size of book struct: 24

什麼是C程式中的聯合體?

在C語言程式設計中,聯合體也是一種使用者自定義的資料型別。聯合體的所有成員共享相同的記憶體位置。因此,如果我們需要對兩個或多個成員使用相同的記憶體位置,那麼聯合體就是最佳的資料型別。最大的聯合體成員定義了聯合體的大小。

在C語言程式設計中,聯合體類似於結構體,因為聯合體變數的建立方式與結構體變數相同。為了在C程式中定義聯合體,使用關鍵字“union”。

語法

C語言中聯合體的語法如下:

union union_name {
   member definition;
} union_variables;

其中,

  • union_name 是賦予聯合體的任意名稱。

  • member definition 是成員變數的集合。

  • union_variable 是聯合體的物件。

示例

#include <stdio.h>
#include <string.h>

union Data {
   int i;
   float f;
};

int main() {
   union Data data;

   data.i = 12;
   data.f = 20.4;

   printf("data.i: %d 
", data.i); printf("data.f: %f
", data.f); return 0; }

當您執行此程式時,輸出將如下所示:

data.i: 1101214515 
data.f: 20.400000 

結構體和聯合體的區別

以下是結構體和聯合體之間的一些重要區別:

關鍵

結構體

聯合體

定義

結構體是在C語言中定義的容器,用於儲存不同型別的資料變數,並且支援使用者自定義變數的儲存。

聯合體也是C語言中一種類似的容器,可以容納不同型別的變數以及使用者自定義變數。

內部實現

C語言中的結構體是內部實現的。每個輸入成員都被分配了單獨的記憶體位置。

而在聯合體中,記憶體只分配給所有輸入變數中大小最大的一個成員,並且該位置由所有這些成員共享。

語法

在C語言中宣告結構體的語法如下:

struct struct_name{
   type element1;
   type element2;
   .
   .
} variable1, variable2, ...;

在C語言中宣告聯合體的語法如下:

union u_name{
   type element1;
   type element2;
   .
   .
} variable1, variable2, ...;

大小

結構體的成員沒有共享位置,因此結構體的大小等於或大於所有資料成員大小的總和。

聯合體的成員沒有單獨的位置,因此其大小等於所有資料成員中最大成員的大小。

值儲存

對於結構體,每個輸入資料成員都有特定的記憶體位置,因此它可以儲存不同成員的多個值。

在聯合體中,所有輸入資料成員只有一個共享的記憶體分配,因此它一次只為所有成員儲存一個值。

初始化

在結構體中,可以同時初始化多個成員。

在聯合體中,一次只能初始化第一個成員。

結論

結構體和聯合體都是C語言程式設計中的複合資料型別。結構體和聯合體之間最顯著的區別在於它們儲存資料的方式。結構體將每個成員儲存在單獨的記憶體位置,而聯合體將其所有成員儲存在同一個記憶體位置。

更新於: 2024年6月28日

29K+ 瀏覽量

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告