ความแตกต่างระหว่างโครงสร้างและสหภาพใน C

โครงสร้างคืออะไร?

โครงสร้างเป็นประเภทข้อมูลที่ผู้ใช้กำหนดในภาษาการเขียนโปรแกรม C ซึ่งรวมรายการข้อมูลที่เกี่ยวข้องกันทางตรรกะของประเภทข้อมูลที่แตกต่างกันเข้าด้วยกัน

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

ยูเนี่ยนคืออะไร

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

ไวยากรณ์ของโครงสร้างการประกาศ

struct [name of the structure]
   {
       type member1;
       type member2;
       type member3;
   };

โครงสร้างถูกประกาศโดยใช้คำสำคัญ “struct” และชื่อของโครงสร้าง หมายเลข 1 หมายเลข 2 หมายเลข 3 เป็นสมาชิกของโครงสร้างแต่ละส่วน ส่วนของร่างกายจะลงท้ายด้วยอัฒภาค (;)

ตัวอย่างโครงสร้างในการเขียนโปรแกรม C

#include <stdio.h>
struct student {
    char name[60];
    int roll_no;
    float marks;
} sdt;
int main() {
    printf("Enter the following information:\n");
    printf("Enter student name: ");
    fgets(sdt.name, sizeof(sdt.name), stdin);
    printf("Enter student roll number: ");
    scanf("%d", & sdt. roll_no);
    printf("Enter students marks: ");
    scanf("%f", & sdt.marks);
    printf("The information you have entered is: \n");
    printf("Student name: ");
    printf("%s", sdt.name);
    printf("Student roll number: %d\n", sdt. roll_no);
    printf("Student marks: %.1f\n", sdt.marks);
    return 0;
}

ในโปรแกรมข้างต้น โครงสร้างที่เรียกว่า นักเรียน จะถูกสร้างขึ้น โครงสร้างนี้มีสมาชิกข้อมูลสามตัว: 1) ชื่อ (สตริง), 2) roll_no (จำนวนเต็ม) และ 3) เครื่องหมาย (ลอย)

หลังจากนั้นจะมีการสร้างตัวแปรโครงสร้าง SDT เพื่อจัดเก็บข้อมูลนักเรียนและแสดงบนหน้าจอคอมพิวเตอร์

Output:

ป้อนข้อมูลต่อไปนี้:

ใส่ชื่อนักเรียน: เจมส์

กรอกหมายเลขรายชื่อนักเรียน: 21

ใส่คะแนนนักเรียน: 67

ข้อมูลที่คุณป้อนคือ:

ชื่อนักเรียน: จอห์น

หมายเลขรายชื่อนักเรียน: 21

คะแนนนักเรียน: 67.0

ไวยากรณ์ของการประกาศสหภาพ

union [name of union]
    {
       type member1;
       type member2;
       type member3;
    };

ประกาศสหภาพโดยใช้คำสำคัญ "สหภาพ" และชื่อของสหภาพ หมายเลข 1 หมายเลข 2 หมายเลข 3 เป็นสมาชิกสหภาพแรงงานรายบุคคล ส่วนของร่างกายจะลงท้ายด้วยอัฒภาค (;)

ตัวอย่าง Union ในการเขียนโปรแกรม C

#include <stdio.h>

union item
{
    int x;
    float y;
    char ch;
};

int main( )
{
    union item it;
    it.x = 12;
    it.y = 20.2;
    it.ch = 'a';
    
    printf("%d\n", it.x);
    printf("%f\n", it.y);
    printf("%c\n", it.ch);
    
    return 0;
}

Output:

1101109601

20.199892

a

ในโปรแกรมข้างต้น คุณจะเห็นว่าค่าของ x และ y เสียหาย เฉพาะตัวแปร ch เท่านั้นที่จะพิมพ์ผลลัพธ์ที่คาดหวัง เป็นเพราะว่าตำแหน่งหน่วยความจำถูกใช้ร่วมกันระหว่างประเภทข้อมูลสมาชิกทั้งหมด

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

โครงสร้างเทียบกับ ยูเนี่ยน

โครงสร้างเทียบกับ ยูเนี่ยน
โครงสร้างเทียบกับ ยูเนี่ยน

นี่คือข้อแตกต่างที่สำคัญระหว่างโครงสร้างและสหภาพ:

โครงสร้าง สหภาพ
คุณสามารถใช้คีย์เวิร์ด struct เพื่อกำหนดโครงสร้างได้ คุณสามารถใช้คำสำคัญสหภาพเพื่อกำหนดสหภาพ
สมาชิกทุกคนภายในโครงสร้างได้รับการกำหนดตำแหน่งหน่วยความจำที่ไม่ซ้ำกัน ร่วมกัน ตำแหน่งหน่วยความจำจะถูกแชร์โดยสมาชิกข้อมูลทั้งหมด
การเปลี่ยนค่าของสมาชิกข้อมูลหนึ่งรายจะไม่ส่งผลกระทบต่อสมาชิกข้อมูลอื่นๆ ในโครงสร้าง การเปลี่ยนค่าของสมาชิกข้อมูลรายหนึ่งจะเปลี่ยนค่าของสมาชิกข้อมูลอื่นๆ แบบรวม
ช่วยให้คุณสามารถเริ่มต้นสมาชิกหลายคนพร้อมกันได้ ช่วยให้คุณสามารถเริ่มต้นเฉพาะสมาชิกคนแรกของสหภาพ
ขนาดรวมของโครงสร้างคือผลรวมของขนาดของสมาชิกข้อมูลทุกคน ขนาดรวมของสหภาพคือขนาดของสมาชิกข้อมูลที่ใหญ่ที่สุด
ส่วนใหญ่จะใช้สำหรับจัดเก็บข้อมูลประเภทต่างๆ ส่วนใหญ่จะใช้สำหรับจัดเก็บข้อมูลประเภทใดประเภทหนึ่งที่มีอยู่
มันใช้พื้นที่สำหรับสมาชิกแต่ละคนและทุกคนที่เขียนด้วยพารามิเตอร์ภายใน ใช้พื้นที่สำหรับสมาชิกที่มีขนาดสูงสุดเขียนอยู่ในพารามิเตอร์ภายใน
คุณสามารถเรียกสมาชิกคนใดก็ได้ในแต่ละครั้ง คุณสามารถเข้าถึงสมาชิกได้ครั้งละหนึ่งคนในสหภาพ
รองรับอาร์เรย์ที่ยืดหยุ่น ไม่รองรับอาเรย์แบบยืดหยุ่น

ข้อดีของโครงสร้าง

ข้อดี/ข้อดีของการใช้โครงสร้างมีดังนี้:

  • โครงสร้างรวบรวมข้อมูลมากกว่าหนึ่งชิ้นเกี่ยวกับเรื่องเดียวกันมารวมกันในที่เดียวกัน
  • จะมีประโยชน์เมื่อคุณต้องการรวบรวมข้อมูลประเภทข้อมูลและพารามิเตอร์ที่คล้ายกัน เช่น ชื่อ นามสกุล ฯลฯ
  • ดูแลรักษาง่ายมากเนื่องจากเราสามารถแสดงบันทึกทั้งหมดได้โดยใช้ชื่อเดียว
  • ในโครงสร้าง เราสามารถส่งชุดระเบียนที่สมบูรณ์ไปยังฟังก์ชันใดๆ โดยใช้พารามิเตอร์ตัวเดียว
  • คุณสามารถใช้อาร์เรย์ของโครงสร้างเพื่อจัดเก็บบันทึกที่มีประเภทคล้ายกันได้มากขึ้น

ข้อดีของสหภาพ

นี่คือข้อดี/ประโยชน์ของการใช้ยูเนี่ยน:

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

ข้อเสียของโครงสร้าง

ข้อเสีย/ข้อเสียของการใช้โครงสร้างมีดังนี้

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

ข้อเสียของสหภาพ

นี่คือข้อเสีย/ข้อเสียของการใช้สหภาพ:

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

ความแตกต่างที่สำคัญ:

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

ตรวจสอบบทช่วยสอน C ของเราสำหรับผู้เริ่มต้นด้วย: - คลิกที่นี่