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

Union กับ Pointer ในภาษา C


Union คืออะไร?

Union คือพื้นที่หน่วยความจำที่ **แชร์ (Shared)** ระหว่างตัวแปรหลายตัวที่มีชนิดข้อมูลต่างกัน ในเวลาเดียวกัน จะมีค่าได้เพียง **หนึ่งสมาชิก (member)** เท่านั้น

ไวยากรณ์ Union

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

ตัวอย่างการประกาศ

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

// 3 วิธีประกาศตัวแปร Union
union sample { int a; float b; char c; } s;           // วิธี 1
union { int a; float b; char c; } s;                  // วิธี 2 (Anonymous)
union sample { int a; float b; char c; }; union sample s; // วิธี 3

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

  • ขนาดของ Union = ขนาดของ **สมาชิกที่ใหญ่ที่สุด**
  • ในเวลาเดียวกัน **เข้าถึงได้เพียง 1 สมาชิก** (เขียนทับกัน)
  • เข้าถึงสมาชิกด้วย . (ตัวแปร) หรือ -> (pointer)
  • ไม่มีข้อจำกัดชนิดข้อมูลใน Union

ตัวอย่าง: Union กับ Pointer

#include <stdio.h>

union abc {
    int a;
    char b;
};

int main() {
    union abc var;
    var.a = 90;                 // เขียนค่า int
    union abc *p = &var;        // Pointer ชี้ไปที่ union
    
    // อ่านผ่าน pointer: a=90, b=byte แรกของ 90 (ASCII 'Z' = 90)
    printf("%d%c", p->a, p->b);
    return 0;
}

ผลลัพธ์:

90Z

คำอธิบายผลลัพธ์

  • var.a = 90 เก็บค่า 90 (0x0000005A ใน little-endian)
  • p->a อ่านเป็น int ได้ 90
  • p->b อ่าน byte แรก (LSB) ได้ 0x5A = 90 = ASCII 'Z'
  • เพราะ Union แชร์หน่วยความจำเดียวกัน การอ่านสมาชิกต่างกันจะได้ค่าต่างกัน

Struct vs Union

คุณสมบัติStructUnion
หน่วยความจำรวมขนาดทุกสมาชิกขนาดสมาชิกที่ใหญ่ที่สุด
การเข้าถึงเข้าถึงทุกตัวพร้อมกันได้เข้าถึงได้ทีละตัว
การใช้งานข้อมูลที่เกี่ยวข้องทั้งหมดเลือกใช้ 1 ในหลายรูปแบบ