Үндсэн ялгаа – C хэл дээрх бүтэц ба нэгдэл
Массив нь Си хэлээр дэмжигдсэн бүтэцтэй өгөгдөл юм. Массивыг ижил төрлийн өгөгдлийн элементүүдийг хадгалахад ашиглаж болно. Хэрэв int тэмдэгтэй мэдэгдэл байгаа бол [10]; тэгвэл тэмдэг нь арван тэмдгийг хадгалах боломжтой массив бөгөөд тэдгээр нь бүхэл тоо юм. Заримдаа өөр өөр төрлийн өгөгдлийн элементүүдийг санах ойн нэг байршилд хадгалах шаардлагатай байдаг. Жишээлбэл, ажилтан нь ажилтны ID, нэр, хэлтэс, нас гэх мэт байж болно. Эдгээр нь өөр өөр төрлийн өгөгдлийн төрөл юм. Тиймээс янз бүрийн өгөгдлийн элементүүдийг нэг нэгж болгон хадгалах аргатай байх шаардлагатай. С хэл дээрх бүтэц, холбоог өөр өөр төрлийн өгөгдлийн элементүүдийг санах ойн нэг байршилд хадгалахад ашигладаг. Бүтэц болон нэгдэл нь ижил төстэй боловч санах ойн хуваарилалтаас шалтгаалан ихэвчлэн ялгаатай байдаг. Бүтцийн хувьсагчийг хадгалахад шаардагдах санах ой нь бүх гишүүдийн санах ойн хэмжээг нийлбэр юм. Холбооны хувьсагчийг хадгалахад шаардагдах санах ой нь холбооны хамгийн том элементэд шаардлагатай санах ой юм. Энэ бол С хэл дээрх бүтэц ба нэгдлийн хоорондох гол ялгаа юм. Энэ нийтлэлд C хэл дээрх бүтэц, нэгдэл хоёрын ялгааг авч үзэх болно.
С хэл дээрх бүтэц гэж юу вэ?
Бүтэц нь C хэл дээрх хэрэглэгчийн тодорхойлсон өгөгдлийн төрөл юм. Энэ нь янз бүрийн төрлийн өгөгдлийн зүйлсийг нэгтгэхэд тусалдаг. Бүтэц нь бүртгэлийг илэрхийлж болно. Оюутан оюутны_id, оюутны нэр гэх мэт байж болно. Хувьсагч бүрийг тусад нь хадгалахын оронд эдгээр бүх өөр өөр өгөгдлийн элементүүдийг бүтэц ашиглан нэг нэгж болгон нягтруулж болно. Энэ нь 'struct' гэсэн түлхүүр үгээр тодорхойлогддог. Бүтцийн хувьд түүний бүх гишүүдэд хүссэн үедээ хандах боломжтой. Дараах нь өгөгдлийн төрлийн Оюутны бүтцийг үүсгэдэг.
struct Оюутан {
оюутны_id;
чар оюутны_нэр[20];
};
Дээрх бүтцийн хувьд хувьсагчдыг дараах байдлаар зарлаж болно.
бүтэц Оюутан оюутан1, оюутан2, оюутан3;
Бүтцийн гишүүдэд хандах хоёр арга бий. Гишүүн оператор (.) болон бүтцийн заагч оператор (->) ашиглана. Гишүүдэд бүтцийн_хувьсагчийн_нэрийг ашиглан хандаж болно. гишүүний нэр. Хэрэв программист 2-р оюутны нэрэнд хандахыг хүсвэл уг мэдэгдлийг printf(student2.student_name); гэж бичиж болно.
Доорх программыг бүтэцтэй харна уу.
Зураг 01: Бүтэцтэй C програм
Дээрх хөтөлбөрийн дагуу Оюутан нь бүтэц юм. Үүнд оюутны_id болон оюутны_нэр орсон. Бүтцийн төрлийн хоёр хувьсагчийг үндсэн программд зарласан. Тэднийг оюутан1, оюутан2 гэж нэрлэдэг. Оюутны1 ID-д гишүүн операторыг student1.student_id=1 гэж ашиглан 1 гэсэн утгатай онооно. "Анн" гэдэг нэр нь мөр юм. Иймд strcpy string copy функцийг ашиглан student_name гишүүн рүү хуулна. ID болон нэрийг student2-д үүнтэй төстэй байдлаар оноодог. Эцэст нь эдгээр утгыг гишүүн оператор ашиглан хэвлэв.
Бүтцийн хувьсагчийг хадгалахад шаардагдах санах ойн хэмжээ нь бүх гишүүдийн санах ойн хэмжээний нийлбэр юм. Student_id нь 4 байт, оюутны_нэр нь 20 байт (нэг тэмдэгт тус бүр нэг байт) агуулдаг. Нийт 24 байт нь бүтцэд шаардагдах санах ойн хэмжээ юм.
С-д Union гэж юу вэ?
Union нь C хэл дээрх хэрэглэгчийн тодорхойлсон өгөгдлийн төрөл юм. Энэ нь өөр өөр төрлийн өгөгдлийн төрлийг нэг санах ойд хадгалахад тусалдаг. Ном нь номын_нэр, үнэ гэх мэт шинж чанартай байж болно. Тэд тус бүрд хувьсагч үүсгэхийн оронд нэгдэл ашиглан бүх өөр өөр өгөгдлийн төрлийг нэг нэгж болгон нягтруулж болно. Үүнийг 'union' гэсэн түлхүүр үг ашиглан тодорхойлсон. Дараах нь үүсмэл мэдээллийн нэгдэл Номыг үүсгэнэ.
unionBook{
тэмдэгтийн нэр[20];
давхар үнэ;
};
Дээрх нэгдлийн хувьд хувьсагчдыг дараах байдлаар зарлаж болно.
эвлэлийн ном1, ном2;
Холбооны гишүүдэд хандах хоёр арга бий. Гишүүн оператор (.) болон бүтцийн заагч оператор (->) ашиглана. Union_variable_name ашиглан гишүүдэд хандаж болно. гишүүний нэр. Хэрэв програмист номын1 нэрэнд хандахыг хүсвэл уг мэдэгдлийг printf(book1.name); гэж бичиж болно.
Доорх хөтөлбөрийг нэгдэлтэй харна уу.
Зураг 02: C программ нь нэгдэл
Дээрх хөтөлбөрийн дагуу Ном бол нэгдэл юм. book1 нь нэгдлийн төрлийн хувьсагч юм. Нэр, үнэ нь өгөгдсөн утгууд юм. Холбооны хувьд зөвхөн нэг гишүүнд нэг удаа хандах боломжтой бөгөөд бусад бүх гишүүд хог хаягдлын үнэ цэнэтэй байх болно. ID-ийн утга зөв хэвлэгдэхгүй байгаа ч үнийн утга зөв хэвлэгдэх болно.
Зураг 03: Холбоотой өөрчилсөн C програм
Дээрх хөтөлбөрийн дагуу Ном бол нэгдэл юм. book1 болон book2 нь нэгдлийн төрлийн хувьсагч юм. Эхлээд book1 нэрний утгыг өгч хэвлэнэ. Дараа нь book2 нэрийн утгыг өгч хэвлэнэ. Нэг гишүүнийг нэг удаа ашиглаж байгаа тул бүх гишүүд зөв хэвлэдэг. Холбоог хадгалахад шаардагдах санах ой нь холбооны хамгийн том элементэд шаардлагатай санах ой юм. Дээрх программд нэр хувьсагч нь 20 байт байна. Энэ нь үнээс том юм. Тиймээс, холбооны санах ойн хуваарилалт 20 байт байна.
С хэл дээрх бүтэц, нэгдлийн хооронд ямар төстэй зүйл байдаг вэ?
- С хэл дээрх Бүтэц болон Холбоо хоёулаа хэрэглэгчийн тодорхойлсон өгөгдлийн төрөл юм.
- С хэл дээрх Бүтэц болон Холбооны аль алиныг нь санах ойн нэг байршилд өөр өөр өгөгдлийн төрлийг хадгалахад ашиглаж болно.
С хэл дээрх бүтэц, нэгдэл хоёрын ялгаа юу вэ?
С хэл дээрх нэгдэл ба бүтэц |
|
Бүтэц нь C хэл дээрх хэрэглэгчийн тодорхойлсон өгөгдлийн төрөл бөгөөд өөр өөр төрлийн өгөгдлийг хамтад нь нэгтгэх боломжийг олгодог. | Union нь C хэл дээрх хэрэглэгчийн тодорхойлсон өгөгдлийн төрөл бөгөөд өөр өөр төрлийн өгөгдлийг хамтад нь нэгтгэх боломжийг олгодог. |
Хүртээмжтэй байдал | |
Бүтцийн хувьд түүний бүх гишүүдэд хэдийд ч хандах боломжтой. | Холбооны зөвхөн нэг гишүүнд нэгэн зэрэг хандах боломжтой бөгөөд бусад бүх гишүүдэд хог хаягдлын утгыг агуулна. |
Санах ойн хуваарилалт | |
Бүтцийн хувьсагчийг хадгалахад шаардагдах санах ой нь бүх гишүүдийн санах ойн хэмжээг нийлбэр юм. | Нэгдлийн хувьсагчийг хадгалахад шаардагдах санах ой нь нэгдлийн хамгийн том элементэд шаардлагатай санах ой юм. |
Түлхүүр үг | |
Бүтэцийг тодорхойлоход хэрэглэгддэг түлхүүр үг нь 'struct'. | Эвлэлийг тодорхойлоход хэрэглэгддэг түлхүүр үг нь 'union'. |
Хураангуй – C хэл дээрх бүтэц болон нэгдэл
Массив нь ижил төрлийн өгөгдлийн элементүүдийг хадгалахад ашиглагддаг. Заримдаа санах ойн нэг байршилд өөр өөр төрлийн өгөгдлийн элементүүдийг хадгалах шаардлагатай байдаг. Си програмчлалын хэл нь энэ даалгаврыг биелүүлэхийн тулд бүтэц, нэгдлийг хангадаг. Аль аль нь хэрэглэгчийн тодорхойлсон өгөгдлийн төрөл юм. Бүтцийн хувьсагчийг хадгалахад шаардагдах санах ой нь бүх гишүүдийн санах ойн хэмжээг нийлбэр юм. Холбооны хувьсагчийг хадгалахад шаардагдах санах ой нь холбооны хамгийн том элементэд шаардлагатай санах ой юм. Энэ нь C. хэл дээрх бүтэц, нэгдлийн хоорондох ялгаа юм.