ความเข้าใจเกี่ยวกับ Union
Union เป็นตำแหน่งหน่วยความจำที่ถูกใช้ร่วมกันโดยตัวแปรหลายตัวที่มีชนิดข้อมูลต่างกัน ในเวลาใดเวลาหนึ่ง จะมีเพียงสมาชิก (member) เพียงตัวเดียวที่เก็บค่าได้
ไวยากรณ์ (Syntax)
union uniontag {
datatype member1;
datatype member2;
// ...
datatype memberN;
};ตัวอย่างการประกาศ Union
union sample {
int a;
float b;
char c;
};การเข้าถึงสมาชิกผ่าน Pointer
ใช้งานคล้ายโครงสร้าง (structure) แต่ใช้ตัวดำเนินการลูกศร (arrow operator ->) แทนจุด (dot operator)
ตัวอย่างโปรแกรม: การใช้ Pointer กับ Union
#include <stdio.h>
union pointer {
int num;
char a;
};
int main() {
union pointer p1;
p1.num = 75;
// p2 เป็น pointer ไปยัง union p1
union pointer *p2 = &p1;
// เข้าถึงสมาชิกผ่าน pointer
printf("%d %c", p2->num, p2->a);
return 0;
}ผลลัพธ์
75 K
คำอธิบาย: ค่า 75 ในรูปแบบ integer เมื่อถูกอ่านเป็น char จะได้ค่า ASCII 75 ซึ่งคือตัวอักษร 'K'
ตัวอย่างเพิ่มเติม
#include <stdio.h>
union pointer {
int num;
char a;
};
int main() {
union pointer p1;
p1.num = 90;
union pointer *p2 = &p1;
printf("%d %c", p2->num, p2->a);
return 0;
}ผลลัพธ์
90 Z
คำอธิบาย: ค่า 90 ใน ASCII คือตัวอักษร 'Z' แสดงให้เห็นว่า union ใช้พื้นที่หน่วยความจำร่วมกันจริง