Structure และ Union ในภาษา C แตกต่างกันที่การจัดสรรหน่วยความจำและวิธีการเข้าถึงข้อมูล
ตารางเปรียบเทียบ
| ลำดับ | หัวข้อ | Structure (struct) | Union (union) |
|---|---|---|---|
| 1 | นิยาม | รวบรวมข้อมูลหลายชนิด (Heterogeneous) กลุ่มเดียว | ตำแหน่งหน่วยความจำที่ใช้ร่วมกันโดยตัวแปรหลายชนิด |
| 2 | คีย์เวิร์ด | struct | union |
| 3 | ไวยากรณ์ | struct tag {
type member1;
type member2;
}; |
union tag {
type member1;
type member2;
}; |
| 4 | การจัดสรรหน่วยความจำ | รวมขนาดทุกสมาชิก เช่น int(4) + float(4) + char(1) = 9+ bytes (ขึ้นกับ padding) |
ขนาดสมาชิกที่ใหญ่ที่สุด เช่น max(4, 4, 1) = 4 bytes |
| 5 | การเข้าถึง | เข้าถึงสมาชิกทุกตัวได้พร้อมกัน | เข้าถึงได้ทีละสมาชิก (ค่าเก่าจะทับ) |
| 6 | การใช้งาน | ใช้เมื่อต้องเก็บข้อมูลหลายอย่างพร้อมกัน | ใช้เมื่อต้องเก็บข้อมูลสลับกัน (ประหยัดหน่วยความจำ) |
ตัวอย่างโปรแกรมเปรียบเทียบขนาด
Structure
#include <stdio.h>
struct size {
double a; // 8 bytes
int b; // 4 bytes
char c; // 1 byte
float d; // 4 bytes
};
int main() {
printf("Struct size = %lu bytes\n", sizeof(struct size));
return 0;
}
Struct size = 24 bytes (เพราะ padding/alignment)
Union
#include <stdio.h>
union size {
double a; // 8 bytes
int b; // 4 bytes
char c; // 1 byte
float d; // 4 bytes
};
int main() {
printf("Union size = %lu bytes\n", sizeof(union size));
return 0;
}
Union size = 8 bytes (เท่ากับ double ที่ใหญ่ที่สุด)
สรุปการเลือกใช้
- ใช้ Struct เมื่อต้องการเก็บข้อมูลหลายค่าพร้อมกัน (เช่น ข้อมูลพนักงาน: รหัส ชื่อ เงินเดือน)
- ใช้ Union เมื่อต้องการเก็บค่าได้ทีละอย่างในเวลาเดียวกัน เพื่อประหยัดหน่วยความจำ (เช่น ตัวแปรที่อาจเป็น int หรือ float หรือ char ทีละครั้ง)