Tuzilishi ham, birlashishi ham C tilida foydalanuvchi tomonidan belgilanadigan ma'lumotlar turlari va kontseptual ravishda bir xil, ammo ular baribir ba'zi jihatlarda farq qiladi: xotira o'z a'zolariga qanday taqsimlanadi. Ular o'xshash tarzda e'lon qilinadi, ammo ular boshqacha ishlaydi. Ular foydalanuvchiga turli xil ma'lumot turlarini bitta nom ostida birlashtirishga imkon beradi. Tarkibiy o'zgaruvchilarni e'lon qilishda har bir a'zo uchun alohida xotira joylashuvi ishlatilgan bo'lsa, birlashma o'zgaruvchisining turli a'zolari bir xil xotira joyini bo'lishadilar. Keling, tuzilish va ittifoq o'rtasidagi farqni batafsil ko'rib chiqaylik.

Tarkib va ​​ittifoq o'rtasidagi farq

Tuzilma nima?

Tuzilma bu C-ga foydalanuvchi tomonidan belgilangan boshqa turdagi ma'lumotlar turi bo'lib, u foydalanuvchiga turli xil ma'lumot turlarini xotira blokida bitta turga birlashtirishga imkon beradi. Tuzilma bir-biri bilan bog'liq oddiy va murakkab ma'lumot turlarini o'z ichiga olishi mumkin, aks holda ular mantiqiy emas. Tarkibdagi har bir a'zo istalgan vaqtda kirish va olish uchun o'z xotirasining manzilini oladi.

Strukturadan ko'plab ma'lumotlar guruhlarga bo'lishni talab qilganda foydalaniladi, bu kitobdagi ko'plab a'zolar to'g'risidagi ma'lumotni yoki bitta kontakt haqidagi barcha ma'lumotlarni - ism, manzil, aloqa raqamini va boshqalarni saqlaydigan manzillar kitobini saqlaydigan katalog kabi. Har bir a'zoning manzili ko'tarilgan tartibda bo'ladi, ya'ni har bir a'zoning xotirasi turli xil qiymatlarda boshlanadi. Bitta a'zoning qiymatini o'zgartirish boshqa a'zolarga ta'sir qilmaydi.

"Strukturaviy" kalit so'z bitta nom ostida turli xil ma'lumotlarning tuzilishini aniqlash uchun ishlatiladi. Masalan, agar siz xodimlar to'g'risidagi ma'lumotlar bazasini yaratmoqchi bo'lsangiz, bitta tashkilotda xodimning ismi, yoshi, telefon raqami va ish haqi ma'lumotlarini saqlashingiz kerak bo'ladi. Bu "сохur" kalit so'zidan iborat bo'lib, keyin tuzuvchi e'lon qilinganligini aytadi.

tizim xodimi {

satr nomi;

satr yoshi;

simli telefon;

ish haqi;

} emp1, emp2;

Bu erda, "xodim" - bu strukturaning nomi va "emp1" va "emp2" ikkita o'zgaruvchilar "ishchi" turida yaratilgan. Yopiq qavslardan keyin nuqta-vergul (;) qo'yilishi kerak.

Tarkib a'zolariga operatorlarning ikki turi kirishlari mumkin:

  1. A'zo operator Tuzilma ko'rsatkich operatori

Birlik nima?

Bu C-da ishlatiladigan maxsus ma'lumot turi bo'lib, foydalanuvchiga bir xil xotira joyida turli xil turdagi ma'lumotlarni saqlashga imkon beradi. Uyushma tuzilishga juda o'xshaydi va uni "tuzilish" kalit so'zini "birlik" so'zi bilan almashtirish orqali aniqlash mumkin. A'zolar bir-birlarining xotiralarini bir-biriga yopishtirishadi va bu uning barcha a'zolariga sig'adigan darajada katta.

O'zgaruvchini birlik bilan bog'lashganda, kompilyator eng katta xotira hajmini hisobga olgan holda xotirani ajratadi, shuning uchun birlashma kattaligi ma'lumotlarning eng katta a'zosi hajmiga teng bo'ladi. Uyushmani ko'plab a'zolar bilan aniqlash mumkin, ammo har qanday vaqtda har bir holatda faqat bitta a'zo o'z ichiga oladi.

Birlashmaning barcha a'zolari uchun manzil bir xil, ya'ni har bir a'zo bir xil qiymatdan boshlanadi. Va bitta a'zoning qiymatini o'zgartirish boshqa a'zolarning qadriyatlariga ta'sir qiladi. Birlashma siz bir nechta ma'lumot turlaridan biri bo'lgan narsalarni saqlamoqchi bo'lganingizda ishlatilishi mumkin.

kasaba uyushmasi xodimi {

char nomi [32];

int yoshi;

suzuvchi ish haqi;

};

Bu erda "uyushma" kaliti so'z tarkibni deklaratsiyasiga juda o'xshash bo'lgan birlikni belgilaydi. O'zgaruvchi 'xodimning ismi', 'xodimning yoshi' bo'lgan butun son yoki 'xodimning ish haqi' degan ma'noni anglatuvchi satr qiymatini saqlashi mumkin.

Tarkib va ​​ittifoq o'rtasidagi farq

1. Kalit so'z

Tuzilishni aniqlash uchun "tuzilish" kalit so'zi ishlatiladi, "Union" kalit so'zi esa birlikni aniqlash uchun ishlatiladi.

2. Xotirani ajratish

Tarkibdagi a'zolar uchun alohida xotira maydoni ajratilgan va a'zolari xotirani almashmaydigan turli xil manzillarga ega. Birlashma, boshqa tomondan, barcha a'zolar uchun bir xil xotira maydonini ajratadi, shuning uchun umumiy xotira joyi ajratilgan.

3. A'zolarga kirish

Kasaba uyushma barcha a'zolar uchun bir vaqtning o'zida bitta qiymatni saqlaydi, bir vaqtning o'zida faqat bitta a'zoga kirish huquqiga ega. Bir nechta qiymatlarni har qanday vaqtda istalgan vaqtda kirish va olish mumkin bo'lgan strukturada saqlash mumkin.

4. Hajmi

Tarkibning kattaligi barcha a'zolar va boshqa a'zolarning yig'indisiga, kasaba uyushmaning kattaligi esa eng katta a'zoning o'lchamiga tengdir.

5. Initsializatsiya

Tuzilishda bir nechta a'zolar birdaniga initsializatsiya qilinishi mumkin, birlashmada esa faqat birinchi a'zo o'z turining qiymati bilan initsializatsiya qilinishi mumkin.

5. Qiymat

Tarkib barcha a'zolarning turli qiymatlarini saqlashi mumkin va bitta a'zoning qiymatini o'zgartirish boshqa a'zolarning qiymatlariga ta'sir qilmaydi. Birlashma barcha a'zolar uchun bir xil qiymatni saqlaydi va bir a'zoning qiymatining o'zgarishi boshqasining qiymatiga ta'sir qiladi.

Tarkib va ​​ittifoq

TuzilishiUyushma
Strukturaviy kalit so'z strukturani aniqlash uchun ishlatiladi.Union kalit so'zi birlikni aniqlash uchun ishlatiladi.
A'zolar strukturada xotirani bo'lishmaydi.A'zolar xotira makonini kasaba uyushmasida bo'lishadilar.
Har qanday a'zo istalgan vaqtda tuzilishga qaytarilishi mumkin.Birlashmada bir vaqtning o'zida faqat bitta a'zoga kirish mumkin.
Bir vaqtning o'zida strukturaning bir nechta a'zolarini ishga tushirish mumkin.Faqat birinchi a'zoni boshlash mumkin.
Tuzilishning o'lchami har bir a'zoning o'lchamiga teng.Uyushmaning hajmi eng katta a'zoning hajmiga teng.
Bir a'zoning o'zgaruvchan qiymati boshqasining qiymatiga ta'sir qilmaydi.Bitta a'zoning qiymatini o'zgartirish boshqa a'zo qiymatlariga ta'sir qiladi.
Barcha a'zolar uchun turli xil qiymatlarni saqlaydi.Barcha a'zolar uchun bir xil qiymatni saqlaydi.

Xulosa

  • Tuzilishi va birligi ham C-da funktsional va kontseptual jihatdan bir xil bo'lgan foydalanuvchilar tomonidan belgilanadigan ma'lumotlar turlari, ammo ba'zi jihatdan juda farq qiladi. Ikkalasida har xil ma'lumotlar turidagi o'zgaruvchilar mavjud, ammo ular o'zgaruvchini e'lon qilish va a'zolarga kirish uchun bir xil sintaksisdan foydalanadilar. Tuzilma 'struktura' kalit so'zi bilan aniqlangan bo'lsa, birlashma 'Union' kalit so'zi bilan aniqlanadi. Har bir a'zo strukturada alohida xotira joylashuvini oladi, kasaba uyushmada esa xotiraning umumiy maydoni eng katta hajmdagi a'zoga teng keladi. Barcha a'zolar birlashishda bir xil xotira maydonini bo'lishadilar. Istalgan ketma-ketlikdagi har qanday a'zoga tuzilmadan kirish mumkin, holbuki ittifoqda faqat o'sha o'zgaruvchiga yaqinda saqlanadigan qiymatdan kirish mumkin.

Adabiyotlar

  • Kanetkar, Yashavant. Kelinglar, C. Dehli: BPB nashrlari, 2002. Chop etish
  • Kanetkar, Yashavant. Kelinglar, C. Dehli: BPB nashrlari, 2002. Chop etish
  • Qirol, K.N. C dasturlash: zamonaviy yondashuv. Nyu-York: W.W. Norton & Company, 1996. Chop etish
  • Griffitz, Devid va Dovud Griffitlar. Birinchi Birinchi S. Sebastopol: davlat uchunReilly Media, 2011. Chop etish
  • Tasvir krediti: https://stackoverflow.com/questions/3921931/how-to-visualise-a-graph-of-c-structs-that-contain-point-to-one-another