Unions ยูเนี่ยน ภาษา C
union เป็นข้อมูลชนิดพิเศษที่มีใน C ที่ช่วยให้การจัดเก็บข้อมูลต่างชนิดในสถานที่ตั้งของหน่วยความจำเดียวกัน คุณสามารถกำหนด ยูเนี่ยนที่มีสมาชิกจำนวนมากได้ แต่สมาชิกเพียงคนเดียวเท่านั้นที่สามารถมีค่าได้ในเวลาที่กำหนด ยูเนี่ยนจัดเตรียมวิธีที่มีประสิทธิภาพในการใช้ตำแหน่งหน่วยความจำเดียวกันสำหรับหลายวัตถุประสงค์
การกำหนด union
เพื่อกำหนดยูเนี่ยนคุณต้องใช้คำสั่ง union ในลักษณะเดียวกับที่คุณทำในขณะที่การกำหนดโครงสร้าง คำสั่ง union กำหนดชนิดข้อมูลใหม่ที่มีสมาชิกมากกว่าหนึ่งรายสำหรับโปรแกรมของคุณ รูปแบบของคำสั่งยูเนี่ยนมีดังต่อไปนี้ −
union [union tag] {
member definition;
member definition;
...
member definition;
} [one or more union variables];
แท็กยูเนี่ยนเป็นตัวเลือกและความหมายของสมาชิกแต่ละคนเป็นนิยามตัวแปรปกติเช่น int i; หรือ float f; หรือนิยามตัวแปรอื่นๆ ที่ถูกต้อง ที่ส่วนท้ายของคำจำกัดความของยูเนี่ยน ก่อนเครื่องหมายอัฒภาคสุดท้าย คุณสามารถระบุตัวแปรยูเนียนได้ตั้งแต่หนึ่งตัวแปรขึ้นไป แต่จะระบุหรือไม่ก็ได้ นี่คือวิธีที่คุณจะกำหนดประเภทสหภาพที่ชื่อ Data ซึ่งมีสมาชิกสามคน i, f และ str −
union Data {
int i;
float f;
char str[20];
} data;
ตอนนี้ ตัวแปรชนิดข้อมูลสามารถจัดเก็บจำนวนเต็ม เลขทศนิยม หรือสตริงของอักขระได้ หมายถึงตัวแปรเดียว กล่าวคือ ตำแหน่งหน่วยความจำเดียวกัน สามารถใช้เก็บข้อมูลได้หลายประเภท คุณสามารถใช้ชนิดข้อมูลที่มีอยู่แล้วภายในหรือที่ผู้ใช้กำหนดภายในสหภาพได้ตามความต้องการของคุณ
หน่วยความจำที่ถูกครอบครองโดย ยูเนี่ยน จะมีขนาดใหญ่พอที่จะรองรับสมาชิกที่ใหญ่ที่สุดของ ยูเนี่ยน ได้ ตัวอย่างเช่น ในตัวอย่างข้างต้น ชนิดข้อมูลจะใช้พื้นที่หน่วยความจำ 20 ไบต์ เนื่องจากเป็นพื้นที่สูงสุดที่สตริงอักขระสามารถใช้ได้ ตัวอย่างต่อไปนี้แสดงขนาดหน่วยความจำทั้งหมดที่ใช้โดยยูเนี่ยนข้างต้น
#include <stdio.h>
#include <string.h>
union Data {
int i;
float f;
char str[20];
};
int main( ) {
union Data data;
printf( "Memory size occupied by data : %d\n", sizeof(data));
return 0;
}
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
Memory size occupied by data : 20
การเข้าถึงสมาชิกยูเนี่ยน
ในการเข้าถึงสมาชิกของยูเนี่ยนใด ๆ เราจะใช้ member access operator (.) การเข้าถึงของสมาชิกจะถูกเข้ารหัสเป็นช่วงเวลาระหว่างชื่อตัวแปรของ ยูเนี่ยน และสมาชิก ยูเนี่ยน ที่เราต้องการเข้าถึง คุณจะใช้คีย์เวิร์ด union เพื่อกำหนดตัวแปรของประเภทยูเนี่ยน ตัวอย่างต่อไปนี้แสดงวิธีการใช้ ยูเนี่ยน ในโปรแกรม −
#include <stdio.h>
#include <string.h>
union Data {
int i;
float f;
char str[20];
};
int main( ) {
union Data data;
data.i = 10;
data.f = 220.5;
strcpy( data.str, "C Programming");
printf( "data.i : %d\n", data.i);
printf( "data.f : %f\n", data.f);
printf( "data.str : %s\n", data.str);
return 0;
}
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming
ในที่นี้ เราจะเห็นได้ว่าค่าของสมาชิก i และ f ของยูเนี่ยนเสียหายเนื่องจากค่าสุดท้ายที่กำหนดให้กับตัวแปรได้ครอบครองตำแหน่งหน่วยความจำ และนี่คือสาเหตุที่ค่าของสมาชิก str ได้รับการพิมพ์ออกมาเป็นอย่างดี
คราวนี้มาดูตัวอย่างเดียวกันอีกครั้งที่เราจะใช้ตัวแปรทีละตัวซึ่งเป็นจุดประสงค์หลักของการมี ยูเนี่ยน :
#include <stdio.h>
#include <string.h>
union Data {
int i;
float f;
char str[20];
};
int main( ) {
union Data data;
data.i = 10;
printf( "data.i : %d\n", data.i);
data.f = 220.5;
printf( "data.f : %f\n", data.f);
strcpy( data.str, "C Programming");
printf( "data.str : %s\n", data.str);
return 0;
}
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
data.i : 10
data.f : 220.500000
data.str : C Programming
ที่นี่ สมาชิกทุกคนได้รับการตีพิมพ์เป็นอย่างดีเพราะมีสมาชิกหนึ่งคนถูกใช้ในแต่ละครั้ง