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


ที่นี่ สมาชิกทุกคนได้รับการตีพิมพ์เป็นอย่างดีเพราะมีสมาชิกหนึ่งคนถูกใช้ในแต่ละครั้ง

Leave a Reply

Your email address will not be published. Required fields are marked *