Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

Union ของ Structure ในภาษา C คืออะไร

ความหมายของ Union

Union เป็นตำแหน่งหน่วยความจำที่ใช้ร่วมกันโดยตัวแปรหลายตัวที่มีชนิดข้อมูลต่างกัน คอมไพเลอร์จะจัดสรรหน่วยความจำเท่ากับขนาดของสมาชิกที่ใหญ่ที่สุด

ไวยากรณ์

union uniontag {
    datatype member1;
    datatype member2;
    // ...
    datatype memberN;
};

วิธีการประกาศตัวแปร Union (3 รูปแบบ)

รูปแบบที่ 1: ประกาศพร้อมกำหนดชื่อตัวแปร

union sample {
    int a;
    float b;
    char c;
} s;

รูปแบบที่ 2: ไม่มี tag name (anonymous union)

union {
    int a;
    float b;
    char c;
} s;

รูปแบบที่ 3: แยกการประกาศ tag และตัวแปร

union sample {
    int a;
    float b;
    char c;
};
union sample s;

คุณสมบัติสำคัญ

  • คอมไพเลอร์จัดสรรหน่วยความจำเท่ากับขนาดสมาชิกที่ใหญ่ที่สุด
  • ในเวลาเดียวกัน อ้างอิงได้เพียงสมาชิกเดียว
  • การเข้าถึงสมาชิกใช้ dot operator (.) สำหรับตัวแปรปกติ และ arrow operator (->) สำหรับ pointer

ตัวอย่างโปรแกรมที่ 1: การ Initialize และเข้าถึง Union

#include <stdio.h>
union sample {
    int a;
    float b;
    char c;
};
int main() {
    union sample s = {10, 20.5, 'A'};
    printf("a=%d\\n", s.a);
    printf("b=%f\\n", s.b);
    printf("c=%c\\n", s.c);
    return 0;
}

ผลลัพธ์

a = garbage value
b = garbage value
c = A

คำอธิบาย: เพราะ union ใช้หน่วยความจำร่วมกัน การกำหนดค่า {10, 20.5, 'A'} จะทำให้มีค่าเพียงตัวสุดท้าย ('A') ที่ถูกต้อง ส่วน a และ b จะได้ค่า garbage

Union ของ Structures (Union ภายใน Structure)

สามารถวาง structure ไว้ภายใน union ได้ เรียกว่า "Union of Structures"

ตัวอย่างโปรแกรมที่ 2: Union ภายใน Structure

#include <stdio.h>
struct x {
    int a;
    float b;
};
union z {
    struct x s;
};
int main() {
    union z u;
    u.s.a = 10;
    u.s.b = 30.5;
    printf("a=%d\\n", u.s.a);
    printf("b=%f\\n", u.s.b);
    return 0;
}

ผลลัพธ์

a= 10
b = 30.5

คำอธิบาย: ในกรณีนี้ union มีเพียงสมาชิกเดียวคือ structure x จึงสามารถเข้าถึงทั้ง a และ b ได้พร้อมกัน เพราะ structure จัดสรรหน่วยความจำแยกต่างหาก