ยูเนี่ยนซี
ยูเนี่ยนเป็นชนิดพิเศษของข้อมูลที่ช่วยให้คุณไปยังสถานที่ที่แตกต่างกันในประเภทเดียวกันของข้อมูลที่เก็บไว้ในหน่วยความจำคุณสามารถกำหนดสหภาพแรงงานที่มีสมาชิกมากขึ้น แต่เวลาใด ๆ สามารถมีได้เพียงหนึ่งในสมาชิกที่มีค่า ยูเนี่ยนให้วิธีการใช้หน่วยความจำตำแหน่งเดียวกันในวิธีที่มีประสิทธิภาพ
ความหมายของสหภาพ
การกําหนดสหภาพคุณต้องใช้งบสหภาพแรงงานและกำหนดโครงสร้างในลักษณะที่คล้ายกันคำสั่งสหภาพกำหนดชนิดข้อมูลใหม่ที่มีส่วนใหญ่ของสมาชิก รูปแบบคำสั่งยูเนี่ยนจะเป็นดังนี้:
union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];
แท็กยูเนี่ยนเป็นตัวเลือกความละเอียดสมาชิกทุกคนคือการกำหนดมาตรฐานของตัวแปรเช่น int i หรือลอย F หรือนิยามตัวแปรอื่น ๆ ที่ถูกต้องก่อนสิ้นเซมิโคลอนร่างกายทั่วไปที่กำหนดไว้คุณสามารถระบุหนึ่งหรือมากกว่าของตัวแปรที่ยูเนี่ยนซึ่งเป็นตัวเลือก นิยามของคำว่าประเภทร่างกายทั่วไปชื่อข้อมูลมีสามสมาชิก 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
สมาชิกสหภาพการเข้าถึง
เพื่อให้สามารถเข้าถึงไปยังประเทศสมาชิกทั่วไปเราจะใช้ประกอบการเข้าถึงสมาชิก (.)ผู้ประกอบการเข้าถึงสมาชิกเป็นชื่อตัวแปรระยะเวลาและสมาชิกสหภาพแรงงานของสหภาพของเราที่จะเข้าถึงได้ระหว่างคุณสามารถใช้คำหลักเพื่อกำหนดประเภทตัวแปรยูเนี่ยนยูเนี่ยนตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้งานของสหภาพที่:
#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
ที่นี่เราสามารถเห็นค่าของฉันและ 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
ที่นี่สมาชิกทุกคนสามารถส่งออกเหมือนเดิมเพราะในเวลาเดียวกันใช้เพียงหนึ่งในสมาชิก