ความแตกต่างระหว่างโครงสร้างและสหภาพใน 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 ของเราสำหรับผู้เริ่มต้นด้วย: - คลิกที่นี่