Негізгі айырмашылық – C тіліндегі құрылым мен одақ
Массив - Си тілінде қолдау көрсетілетін құрылымдық деректер. Массив бір типтегі деректер элементтерін сақтау үшін пайдаланылуы мүмкін. Егер int белгілері ретінде мәлімдеме болса [10]; онда белгілер он белгіні сақтай алатын массив және олардың барлығы бүтін сандар. Кейде әртүрлі типтегі деректер элементтерін бір жад орнында сақтау қажет. Мысалы, қызметкерде қызметкердің жеке куәлігі, аты-жөні, бөлімшесі, жасы және т.б. болуы мүмкін. Олар әр түрлі деректер түріне жатады. Сондықтан әртүрлі деректер элементтерін бір бірлік ретінде сақтау әдісі болуы керек. С тіліндегі құрылымдар мен одақтар бір жад орнында әртүрлі типтегі деректер элементтерін сақтау үшін пайдаланылады. Құрылым мен одақ ұқсас, бірақ олар негізінен жадты бөлуге байланысты ерекшеленеді. Құрылымның айнымалы мәнін сақтау үшін қажетті жад барлық мүшелердің жады көлемінің қосындысы болып табылады. Бірлестік айнымалы мәнін сақтау үшін қажетті жад одақтағы ең үлкен элемент үшін қажетті жад болып табылады. Бұл C тіліндегі құрылым мен одақ арасындағы негізгі айырмашылық. Бұл мақалада C тіліндегі құрылым мен одақ арасындағы айырмашылық талқыланады.
С тіліндегі құрылым дегеніміз не?
Құрылым C тілінде пайдаланушы анықтайтын деректер түрі болып табылады. Ол әртүрлі типтегі деректер элементтерін біріктіруге көмектеседі. Құрылым жазбаларды көрсете алады. Студенттің студент_идентификаторы, студент_аты және т.б. болуы мүмкін. Әрбір айнымалы мәнді бөлек сақтаудың орнына, барлық осы әртүрлі деректер элементтері құрылымды пайдалана отырып, бір бірлікке жинақы болуы мүмкін. Ол 'struct' кілт сөзі арқылы анықталады. Құрылымда оның барлық мүшелеріне кез келген уақытта қол жеткізуге болады. Төменде келтірілген деректер түрі struct Student жасайды.
struct Студент {
оқушы_идентификаторы;
char студент_аты[20];
};
Жоғарыдағы құрылым үшін айнымалы мәндерді келесідей жариялауға болады.
құрылым Оқушы студент1, студент2, студент3;
Құрылым мүшелеріне қол жеткізудің екі әдісі бар. Бұл мүше операторын (.) және құрылым көрсеткіші операторын (->) пайдалану арқылы. Мүшелерге structure_variable_name арқылы кіруге болады. мүше аты. Егер бағдарламашы студент 2-нің атына қол жеткізгісі келсе, онда ол мәлімдемені printf(student2.student_name); түрінде жаза алады.
Құрылымы бар төмендегі бағдарламаны қараңыз.
01-сурет: Құрылымдары бар C бағдарламасы
Жоғарыдағы бағдарлама бойынша Студент құрылым болып табылады. Онда студент_идентификаторы және студент_аты бар. Негізгі программада құрылым типінің екі айнымалысы жарияланған. Олар студент1 және студент2 деп аталады. Student1 идентификаторы студент1.student_id=1 ретінде мүше операторын пайдаланып 1 мәнімен тағайындалады. «Анн» атауы – жол. Сондықтан ол strcpy жолды көшіру функциясы арқылы student_name мүшесіне көшіріледі. Идентификатор мен атау студент2-ге ұқсас жолмен тағайындалады. Соңында, бұл мәндер мүше операторы арқылы басып шығарылады.
Құрылым айнымалы мәнін сақтау үшін қажетті жад көлемі барлық мүшелердің жады көлемінің қосындысы болып табылады. student_id құрамында 4 байт және студент_атауы 20 байттан тұрады (таңба үшін әрқайсысы бір байт). Жалпы 24 байт құрылым қажет ететін жад көлемінің қосындысы болып табылады.
С тілінде Union дегеніміз не?
Бірлестік C тілінде пайдаланушы анықтайтын деректер түрі болып табылады. Ол әртүрлі деректер түрлерін бір жад орнында сақтауға көмектеседі. Кітапта кітап_атауы, баға және т.б. сияқты сипаттар болуы мүмкін. Олардың әрқайсысы үшін айнымалы мәндерді жасаудың орнына, біріктіруді пайдаланып, барлық әр түрлі деректер түрлерін бір бірлікке жинақтау үшін біріктіруді пайдалануға болады. Ол 'union' кілт сөзі арқылы анықталады. Келесі туынды деректер бірлестігі кітабын жасайды.
unionBook{
таңба атауы[20];
қос баға;
};
Жоғарыдағы біріктіру үшін айнымалы мәндерді келесідей жариялауға болады.
одақ 1-кітап, 2-кітап;
Одақ мүшелеріне кірудің екі әдісі бар. Бұл мүше операторын (.) және құрылым көрсеткіші операторын (->) пайдалану арқылы. Мүшелерге union_variable_name арқылы кіруге болады. мүше аты. Егер бағдарламашы кітап1 атауына қол жеткізгісі келсе, онда ол мәлімдемені printf(book1.name); ретінде жаза алады.
Төмендегі бағдарламаны кәсіподақпен қараңыз.
02-сурет: біріктіруді пайдаланатын C бағдарламасы
Жоғарыдағы бағдарлама бойынша Кітап – одақ. book1 - біріктіру түрінің айнымалысы. Атау мен баға тағайындалған мәндер. Бірлестікте бір уақытта оның мүшелерінің біреуіне ғана қатынасуға болады және барлық басқа мүшелерге қоқыс мәндері болады. Идентификатор мәні дұрыс басып шығарылмайды, бірақ баға мәні дұрыс басып шығарылады.
03-сурет: біріктірілген модификацияланған C бағдарламасы
Жоғарыдағы бағдарлама бойынша Кітап – одақ. book1 және book2 - одақ түріндегі айнымалылар. Алдымен, book1 атауының мәні тағайындалады және ол басып шығарылады. Содан кейін book2 атауының мәні тағайындалады және ол басып шығарылады. Бір уақытта бір мүше пайдаланылғандықтан, барлық мүшелер дұрыс басып шығарады. Бірікті сақтау үшін қажетті жад одақтың ең үлкен элементі үшін қажетті жад болып табылады. Жоғарыдағы бағдарламада айнымалының атауы 20 байт. Бұл бағадан үлкенірек. Осылайша, одақ үшін жадты бөлу 20 байт.
С тіліндегі құрылым мен одақтың қандай ұқсастықтары бар?
- С тіліндегі Құрылым да, Бірлестік те пайдаланушы анықтайтын деректер түрлері.
- С тіліндегі құрылымды да, біріктіруді де бір жад орнында әртүрлі деректер түрлерін сақтау үшін пайдалануға болады.
С тіліндегі құрылым мен одақтың айырмашылығы неде?
C тіліндегі құрылым мен одақ |
|
Structure - әртүрлі типтегі деректерді бірге біріктіруге мүмкіндік беретін Си тіліндегі пайдаланушы анықтайтын деректер түрі. | Union - әртүрлі типтегі деректерді бірге біріктіруге мүмкіндік беретін Си тіліндегі пайдаланушы анықтайтын деректер түрі. |
Арнайы мүмкіндіктер | |
Құрылымда оның барлық мүшелеріне кез келген уақытта қол жеткізуге болады. | Бірлестікте оның мүшелерінің біреуіне ғана кіруге болады және барлық басқа мүшелерде қоқыс мәндері болады. |
Жадты бөлу | |
Құрылым айнымалы мәнін сақтау үшін қажетті жад барлық мүшелердің жады көлемінің қосындысы болып табылады. | Бірлестік айнымалы мәнін сақтауға қажетті жад - бірлестіктегі ең үлкен элемент үшін қажет жад. |
Кілтсөз | |
Құрылымды анықтау үшін қолданылатын кілт сөз – «құрылым». | Одақты анықтау үшін қолданылатын кілт сөз – «одақ». |
Қорытынды – C тіліндегі құрылым мен одақ
Массив бір типтегі деректер элементтерін сақтау үшін пайдаланылады. Кейде әртүрлі типтегі деректер элементтерін бір жад орнында сақтау қажет. Си бағдарламалау тілі осы тапсырманы орындау үшін құрылым мен біріктіруді қамтамасыз етеді. Екеуі де пайдаланушы анықтайтын деректер түрлері. Құрылымның айнымалы мәнін сақтау үшін қажетті жад барлық мүшелердің жады көлемінің қосындысы болып табылады. Бірлестік айнымалы мәнін сақтау үшін қажетті жад одақтағы ең үлкен элемент үшін қажетті жад болып табылады. Бұл C тіліндегі құрылым мен одақ арасындағы айырмашылық.