Union เป็น User-defined Data Type ที่ สมาชิกทุกตัวใช้หน่วยความจำร่วมกัน ขนาด Union = ขนาดสมาชิกที่ใหญ่ที่สุด เหมาะสำหรับเก็บค่าที่ใช้สลับกัน เพื่อประหยัดหน่วยความจำ
รูปแบบ
union union_name {
member_definition;
} union_variables;
ตัวอย่างโค้ด
#include <stdio.h>
#include <string.h>
union Data {
int i;
float f;
} data, data1;
int main() {
printf("Memory size occupied by data : %d\t%d", sizeof(data), sizeof(data1));
return 0;
}
ผลลัพธ์
Memory size occupied by data : 4 4
กรณีใช้งานจริง
- Type Punning (เข้าถึงข้อมูลเดียวกันหลายรูปแบบ)
- Protocol Buffers / Network Packets (Field ที่ไม่ใช้พร้อมกัน)
- Variant Types (เก็บค่าได้หลายประเภท แต่ทีละประเภท)
- Embedded Systems ที่จำกัดหน่วยความจำ
ข้อควรระวัง: การเข้าถึงสมาชิกที่ไม่ได้เขียนล่าสุดเป็น Undefined Behavior ใน C มาตรฐาน (ยกเว้นบางกรณีเช่น Common Initial Sequence)