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