ቁልፍ ልዩነት - መዋቅር vs ህብረት በሲ
አደራደር በC ቋንቋ የተዋቀረ ውሂብ ነው። ድርድር አንድ አይነት የውሂብ ክፍሎችን ለማከማቸት ጥቅም ላይ ሊውል ይችላል. እንደ int ምልክቶች [10] መግለጫ ካለ; ከዚያም ማርክ አስር ምልክቶችን የሚያከማች ድርድር ሲሆን ሁሉም ኢንቲጀር ናቸው። አንዳንድ ጊዜ የተለያዩ አይነት የውሂብ ክፍሎችን በተመሳሳይ ማህደረ ትውስታ ውስጥ ማከማቸት ያስፈልጋል. ለምሳሌ አንድ ሰራተኛ የሰራተኛ መታወቂያ፣ ስም፣ ክፍል፣ እድሜ ወዘተ ሊኖረው ይችላል።የተለያዩ የመረጃ አይነቶች ናቸው። ስለዚህ የተለያዩ የዳታ ክፍሎችን እንደ አንድ አሃድ ለማከማቸት ዘዴ መኖሩ አስፈላጊ ነው. በC ውስጥ ያሉ መዋቅሮች እና ዩኒየኖች የተለያዩ አይነት ዳታ ክፍሎችን በተመሳሳይ የማስታወሻ ቦታ ለማከማቸት ያገለግላሉ።መዋቅር እና ማህበር ተመሳሳይ ናቸው ነገር ግን በዋነኝነት የሚለያዩት በማስታወሻ ክፍፍል ምክንያት ነው። የመዋቅር ተለዋዋጭ ለማከማቸት የሚያስፈልገው ማህደረ ትውስታ የሁሉም አባላት ማህደረ ትውስታ መጠን ማጠቃለያ ነው. የማህበር ተለዋዋጭ ለማከማቸት የሚያስፈልገው ማህደረ ትውስታ በህብረቱ ውስጥ ላለው ትልቁ አካል የሚያስፈልገው ማህደረ ትውስታ ነው። በሐ ውስጥ በመዋቅር እና በማህበር መካከል ያለው ቁልፍ ልዩነት ያ ነው ይህ መጣጥፍ በC. በመዋቅር እና በማህበር መካከል ያለውን ልዩነት ያብራራል።
በC ውስጥ መዋቅር ምንድነው?
አወቃቀር በ C ውስጥ በተጠቃሚ የተገለጸ የውሂብ አይነት ነው። የተለያዩ አይነት የዳታ ንጥሎችን ለማጣመር ይረዳል። መዋቅር መዝገቦችን ሊወክል ይችላል. ተማሪው የተማሪ_መታወቂያ ፣የተማሪ_ስም ወዘተ ሊኖረው ይችላል።እያንዳንዱን ተለዋዋጭ ለየብቻ ከማጠራቀም ይልቅ፣እነዚህ ሁሉ የተለያዩ የውሂብ ንጥሎች መዋቅርን በመጠቀም ወደ አንድ ክፍል ሊጣመሩ ይችላሉ። “struct” የሚለውን ቁልፍ ቃል በመጠቀም ይገለጻል። በአንድ መዋቅር ውስጥ፣ ሁሉም አባላቶቹ በማንኛውም ጊዜ ሊገኙ ይችላሉ። የሚከተለው የተገኘ የውሂብ አይነት struct ተማሪን ይፈጥራል።
መዋቅር ተማሪ {
የተማሪ_መታወቂያ፤
የቻር ተማሪ_ስም[20]፤
}፤
ከላይ ላለው መዋቅር፣ተለዋዋጮች እንደሚከተለው ሊገለጹ ይችላሉ።
መዋቅር የተማሪ ተማሪ1፣ ተማሪ2፣ ተማሪ3፤
የመዋቅሩ አባላትን ለማግኘት ሁለት መንገዶች አሉ። ይህም የአባል ኦፕሬተርን (.) እና የመዋቅር ጠቋሚ ኦፕሬተርን (->) በመጠቀም ነው። መዋቅር_ተለዋዋጭ_ስም በመጠቀም አባላቱን ማግኘት ይቻላል። የአባል ስም. ፕሮግራም አድራጊው የተማሪውን 2 ስም ማግኘት ከፈለገ፣ መግለጫውን እንደ printf(student2.student_name) ብሎ መፃፍ ይችላል፤
ከታች ያለውን ፕሮግራም ከመዋቅር ጋር ያመልክቱ።
ምስል 01፡ C ፕሮግራም ከመዋቅሮች ጋር
ከላይ ባለው ፕሮግራም መሰረት ተማሪ መዋቅር ነው።የተማሪ_መታወቂያ እና የተማሪ_ስም ይዟል። በዋናው ፕሮግራም ውስጥ ሁለት ዓይነት የመዋቅር ዓይነት ተለዋዋጮች ታውቀዋል። ተማሪ1 እና ተማሪ2 ይባላሉ። የተማሪ1 መታወቂያ ከዋጋ 1 ጋር የተመደበው አባል ኦፕሬተርን እንደ ተማሪ1.student_id=1 ነው። "አን" የሚለው ስም ሕብረቁምፊ ነው. ስለዚህ፣ የሕብረቁምፊ ቅጂ ተግባር strcpyን በመጠቀም ወደ የተማሪ_ስም አባል ይገለበጣል። መታወቂያው እና ስሙ በተመሳሳይ መልኩ ለተማሪ2 ተሰጥቷል። በመጨረሻም፣ እነዚያ እሴቶች የሚታተሙት አባል ኦፕሬተርን በመጠቀም ነው።
የመዋቅር ተለዋዋጭ ለማከማቸት የሚያስፈልገው የማህደረ ትውስታ መጠን የሁሉም አባላት የማህደረ ትውስታ መጠን ድምር ነው። የተማሪ_መታወቂያው 4 ባይት እና የተማሪ_ስም 20 ባይት ይይዛል (ለአንድ ገፀ ባህሪ አንድ ባይት)። አጠቃላይ 24 ባይት መዋቅሩ የሚፈልገው የማህደረ ትውስታ መጠን ድምር ነው።
ዩኒየን በሲ ምንድን ነው?
አንድ ህብረት በC ውስጥ በተጠቃሚ የተገለጸ የውሂብ አይነት ነው።የተለያዩ የዳታ አይነቶችን በተመሳሳይ የማስታወሻ ቦታ ለማስቀመጥ ይረዳል። መፅሃፍ እንደ መፅሃፍ ስም ፣ዋጋ ወዘተ ያሉ ንብረቶች ሊኖሩት ይችላል።ማህበር ለእያንዳንዳቸው ተለዋዋጮችን ከመፍጠር ይልቅ ዩኒየንን በመጠቀም ሁሉንም የተለያዩ የመረጃ አይነቶች ወደ አንድ አሃድ ማጠቃለል ይቻላል።እሱ የሚገለጸው 'ህብረት' የሚለውን ቁልፍ ቃል በመጠቀም ነው። የሚከተለው የተገኘ የውሂብ ህብረት መጽሐፍ ይፈጥራል።
የህብረትቡክ{
የቻር ስም[20]፤
ድርብ ዋጋ፤
}፤
ከላይ ላለው ህብረት፣ ተለዋዋጮች እንደሚከተለው ሊገለጹ ይችላሉ።
የኅብረት መጽሐፍ 1፣ book2፤
የህብረቱ አባላትን ለማግኘት ሁለት መንገዶች አሉ። ይህም የአባል ኦፕሬተርን (.) እና የመዋቅር ጠቋሚ ኦፕሬተርን (->) በመጠቀም ነው። አባላቱን union_variable_name በመጠቀም ማግኘት ይቻላል። የአባል ስም. ፕሮግራም አድራጊው የመጽሐፉን ስም 1 ማግኘት ከፈለገ፣ መግለጫውን እንደ printf(book1.name) አድርጎ መፃፍ ይችላል፤
ከታች ያለውን ፕሮግራም ከማህበር ጋር ይመልከቱ።
ምስል 02፡ C ፕሮግራም ዩኒየን
ከላይ ባለው ፕሮግራም መሰረት መፅሃፉ ህብረት ነው። መጽሐፉ 1 የኅብረት ዓይነት ተለዋዋጭ ነው። ስሙ እና ዋጋው የተመደቡት እሴቶች ናቸው። በማህበር ውስጥ፣ ከአባላቱ ውስጥ አንዱን ብቻ በአንድ ጊዜ ማግኘት ይቻላል እና ሁሉም ሌሎች አባላት የቆሻሻ እሴት ይኖራቸዋል። የመታወቂያው ዋጋ በትክክል አይታተምም ነገር ግን የዋጋ ዋጋው በትክክል ያትማል።
ምስል 03፡ የተሻሻለው ሲ ፕሮግራም ከህብረት
ከላይ ባለው ፕሮግራም መሰረት መፅሐፍ ህብረት ነው። መጽሐፉ 1 እና 2 የኅብረት ዓይነት ተለዋዋጮች ናቸው። በመጀመሪያ የመፅሃፍ1 ስም ዋጋ ተመድቦ ታትሟል። ከዚያ የ book2 ስም ዋጋ ተመድቦ ታትሟል። አንድ አባል በአንድ ጊዜ ጥቅም ላይ እየዋለ ስለሆነ ሁሉም አባላት በትክክል ያትማሉ። ማህበሩን ለማከማቸት የሚያስፈልገው ማህደረ ትውስታ ለህብረቱ ትልቁ አካል የሚያስፈልገው ማህደረ ትውስታ ነው።ከላይ ባለው ፕሮግራም ውስጥ, ተለዋዋጭ ስም 20 ባይት ነው. ከዋጋው ይበልጣል። ስለዚህ የማህበሩ የማህደረ ትውስታ ድልድል 20 ባይት ነው።
በC ውስጥ በመዋቅር እና በህብረት መካከል ያለው ተመሳሳይነት ምንድን ነው?
- ሁለቱም መዋቅር እና ህብረት በተጠቃሚ የተገለጹ የውሂብ አይነቶች ናቸው።
- ሁለቱም መዋቅር እና ዩኒየን በ C ውስጥ የተለያዩ የውሂብ አይነቶችን በተመሳሳይ የማስታወሻ ቦታ ለማከማቸት ጥቅም ላይ ሊውሉ ይችላሉ።
በC ውስጥ በመዋቅር እና በህብረት መካከል ያለው ልዩነት ምንድነው?
መዋቅር vs ህብረት በC |
|
መዋቅር በC ቋንቋ በተጠቃሚ የተገለጸ የውሂብ አይነት ሲሆን የተለያዩ አይነት መረጃዎችን በአንድ ላይ ማጣመር ያስችላል። | Union በC ቋንቋ በተጠቃሚ የተገለጸ የውሂብ አይነት ሲሆን የተለያዩ አይነት መረጃዎችን በአንድ ላይ ማጣመር ያስችላል። |
ተደራሽነት | |
በመዋቅር ውስጥ ሁሉም አባላቶቹ በማንኛውም ጊዜ ሊገኙ ይችላሉ። | በማህበር ውስጥ ከአባላቱ ውስጥ አንዱን ብቻ በአንድ ጊዜ ማግኘት ይቻላል እና ሁሉም ሌሎች አባላት የቆሻሻ እሴቶችን ይይዛሉ። |
የማህደረ ትውስታ ድልድል | |
የመዋቅር ተለዋዋጭ ለማከማቸት የሚያስፈልገው ማህደረ ትውስታ የሁሉም አባላት የማህደረ ትውስታ መጠን ማጠቃለያ ነው። | የማህበር ተለዋዋጭ ለማከማቸት የሚያስፈልገው ማህደረ ትውስታ በህብረቱ ውስጥ ላለው ትልቁ አካል የሚያስፈልገው ማህደረ ትውስታ ነው። |
ቁልፍ ቃል | |
አወቃቀሩን ለመግለጽ የሚጠቅመው ቁልፍ ቃል 'struct' ነው። | ማህበርን ለመግለጽ የሚጠቅመው ቁልፍ ቃል 'ህብረት' ነው። |
ማጠቃለያ - መዋቅር vs ህብረት በC
አንድ ድርድር አንድ አይነት የውሂብ ክፍሎችን ለማከማቸት ይጠቅማል።አንዳንድ ጊዜ የተለያዩ አይነት የውሂብ ክፍሎችን በአንድ ማህደረ ትውስታ ቦታ ላይ ማከማቸት አስፈላጊ ነው. የ C ፕሮግራሚንግ ቋንቋ ይህንን ተግባር ለመፈፀም መዋቅር እና ህብረትን ይሰጣል ። ሁለቱም በተጠቃሚ የተገለጹ የውሂብ አይነቶች ናቸው። የመዋቅር ተለዋዋጭ ለማከማቸት የሚያስፈልገው ማህደረ ትውስታ የሁሉም አባላት ማህደረ ትውስታ መጠን ማጠቃለያ ነው. የማህበር ተለዋዋጭ ለማከማቸት የሚያስፈልገው ማህደረ ትውስታ በህብረቱ ውስጥ ላለው ትልቁ አካል የሚያስፈልገው ማህደረ ትውስታ ነው። ይህ በC. በመዋቅር እና በማህበር መካከል ያለው ልዩነት ነው።