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

ความแตกต่างระหว่าง Structure และ Union ในภาษา C

Structure และ Union ในภาษา C แตกต่างกันที่การจัดสรรหน่วยความจำและวิธีการเข้าถึงข้อมูล

ตารางเปรียบเทียบ

ลำดับหัวข้อStructure (struct)Union (union)
1นิยาม รวบรวมข้อมูลหลายชนิด (Heterogeneous) กลุ่มเดียว ตำแหน่งหน่วยความจำที่ใช้ร่วมกันโดยตัวแปรหลายชนิด
2คีย์เวิร์ดstructunion
3ไวยากรณ์
struct tag {
    type member1;
    type member2;
};
union tag {
    type member1;
    type member2;
};
4การจัดสรรหน่วยความจำ รวมขนาดทุกสมาชิก
เช่น int(4) + float(4) + char(1) = 9+ bytes (ขึ้นกับ padding)
ขนาดสมาชิกที่ใหญ่ที่สุด
เช่น max(4, 4, 1) = 4 bytes
5การเข้าถึง เข้าถึงสมาชิกทุกตัวได้พร้อมกัน เข้าถึงได้ทีละสมาชิก (ค่าเก่าจะทับ)
6การใช้งาน ใช้เมื่อต้องเก็บข้อมูลหลายอย่างพร้อมกัน ใช้เมื่อต้องเก็บข้อมูลสลับกัน (ประหยัดหน่วยความจำ)

ตัวอย่างโปรแกรมเปรียบเทียบขนาด

Structure

#include <stdio.h>

struct size {
    double a;  // 8 bytes
    int b;     // 4 bytes
    char c;    // 1 byte
    float d;   // 4 bytes
};

int main() {
    printf("Struct size = %lu bytes\n", sizeof(struct size));
    return 0;
}
Struct size = 24 bytes  (เพราะ padding/alignment)

Union

#include <stdio.h>

union size {
    double a;  // 8 bytes
    int b;     // 4 bytes
    char c;    // 1 byte
    float d;   // 4 bytes
};

int main() {
    printf("Union size = %lu bytes\n", sizeof(union size));
    return 0;
}
Union size = 8 bytes  (เท่ากับ double ที่ใหญ่ที่สุด)

สรุปการเลือกใช้

  • ใช้ Struct เมื่อต้องการเก็บข้อมูลหลายค่าพร้อมกัน (เช่น ข้อมูลพนักงาน: รหัส ชื่อ เงินเดือน)
  • ใช้ Union เมื่อต้องการเก็บค่าได้ทีละอย่างในเวลาเดียวกัน เพื่อประหยัดหน่วยความจำ (เช่น ตัวแปรที่อาจเป็น int หรือ float หรือ char ทีละครั้ง)