一、struct和union的定義
// struct 的定義
struct 結構名 {
數據類型1 成員名1;
數據類型2 成員名2;
…… // 其他成員
};
// union 的定義
union 聯合名 {
數據類型1 成員名1;
數據類型2 成員名2;
…… // 其他成員
};
struct 和 union 都是 C 語言中的複合類型,可以將多個不同類型的數據組合在一起進行操作。
其中,struct 是一種數據結構,它可以存儲不同的數據類型,並可以按照需要訪問其中的成員;union 也可以存儲多個不同數據類型的數據,但只能使用其中的一個成員。
二、struct和union的使用
1. struct 的使用
使用 struct 時,可以先定義一個結構體類型,然後根據該類型定義結構體變量。
#include <stdio.h>
struct student {
char name[20];
int age;
float score;
};
int main() {
struct student s1 = {"Tom", 18, 89.5};
printf("name: %s, age: %d, score: %.2f\n", s1.name, s1.age, s1.score);
return 0;
}
在上面的代碼中,我們定義了一個名為 student 的結構體類型,它包含了三個成員:name、age 和 score。在 main 函數中,我們定義了一個 student 類型的結構體變量 s1,並使用初始化表達式為其對應的成員賦初值。
在輸出時,我們可以使用“結構體變量名.成員名”的方式訪問結構體中的成員,比如 s1.name 表示訪問 s1 變量的 name 成員。
2. union 的使用
使用 union 時,定義一個聯合體類型,根據該類型定義聯合體變量。
#include <stdio.h>
union value {
int i;
float f;
};
int main() {
union value v;
v.i = 10;
printf("v.i = %d, v.f = %f\n", v.i, v.f);
v.f = 3.14;
printf("v.i = %d, v.f = %f\n", v.i, v.f);
return 0;
}
在上面的代碼中,我們定義了一個名為 value 的聯合體類型,它包含了兩個成員:int 類型的 i 和 float 類型的 f。在 main 函數中,我們定義了一個 value 類型的聯合體變量 v,並先給其 i 成員賦值。然後我們輸出 v.i 和 v.f,發現它們的值一樣,因為它們共用同一塊內存。
接着我們給 v.f 賦值,並再次輸出 v.i 和 v.f,發現它們的值相互影響,因為它們還是共用同一塊內存。
三、struct和union的區別
1. 內存佔用
struct 中的成員會按照定義的順序從低地址向高地址排列,並且各個成員的內存空間是獨立的,所以一個 struct 類型的變量通常會佔用比其所有成員的內存空間之和還要大的內存空間。
而 union 中的所有成員會共用同一塊內存空間。
2. 訪問成員
使用 struct 時,可以同時訪問其所有成員,而使用 union 時只能訪問其中的一個成員。
3. 初值設置
使用 struct 時可以為所有成員設置初值;而使用 union 時,由於所有成員共用內存,因此只有最後一次賦值的成員的值有效。
四、小結
struct 和 union 都是 C 語言中的複合類型,可以將多個不同類型的數據組合在一起進行操作。它們之間有很大的區別,主要表現在內存佔用、訪問成員和初值設置方面。
在 C 語言程序設計中,struct 和 union 經常用於定義數據類型、數據結構和位操作等方面,了解其使用方法和區別對於寫出高效且可讀性強的代碼具有重要意義。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/251032.html