Дәріс 13. Құрылымдар және бірігулер.
С/С++-дегі құрылымдар – бұл біріктірілген деректер, олардың расында логикалық өзара байланыс бар. Массивтен айырмашылығы, құрылым түрлі типті деректерді қамтиды. Си-дегі кез келген құрылым structкілттік сөзінен басталу керек. Құрылымдағы барлық деректер фигуралық жақшаға алынып жазылады, соңына нүктелі үтір (;) қойылады. Мысалы: топ құрылымы (Фамилия, студент аты, тобы, GPA).
С/С++-дегі құрылымның сипатталауы:
struct group {
char fam[20];
char name[20];
char name_group;
float gpa;
};
Құрылымдағы деректер түрлі типті, бірақ олар логикалық байланысқа біріктірілген. Құрылымдағы деректердің уникальды аттары болу керек, түрлі құрылымдарда бірлей атауларды қолдануға болады. Құрылымды баяндаудың Си тіліндегі кез келген типті деректерді баяндаудан еш айырмашылығы жоқ.
Құрылымды инициализациялау массивті инициализациялаумен бірдей. Мысалы:
struct group a = {"Ivanov", "Sergey", 'PR', 3.0 };
struct group типті айнымалы құрылады да, ондағы барлық өрістерге мән беріледі. Құрылымды инициализациялау кезіндегі тәртіп өте маңызды, себебі компьютер деректерді өзі сұрыптай алмайды. Егер қандай да бір өріс толтырылмаған болса, оған автоматты түрде 0 – бүтін сандық типтер үшін; NULL – нұсқағыштар үшін; \0 (ноль-терминатор) – қатарлық типтер үшін жазылады.
Құрылым типі әдетте ақпараттық жүйелер, дерекқор әзірлегенде қолданылады. Мынадай құрылым берілсін:
Мұндай құрылым элементтері (фамилия, курс, топ, стипендия) өрістер деп аталады. Әрбір өріске сәйкесінше атау және тип қойылуы керек.
Құрылымдық типті баяндау форматы:
Struct тип_аты
{элементтер_анықталуы};
Соңында міндетті түрде нүктелі үтір қойылады (бұл оператор).
Мысал:
Struct student {char fam [30];
Int kyrs;
Char grup [3];
Float stip;
};
Осыдан кейін student құрылымдық тип атына айналады, ол кейбір айнымалыларға тағайындалуы мүмкін. Си стандартына сәйкес былай жазылады:
Struct student stud1, stud2;
Құрылымдармен орындалатын операциялар:
- құрылым өрісіне өзі типтес мән меншіктеу
- құрылым адресін алу (&);
- құрылымның кез келген өрісіне қатынас құру;
- құрылым өлшемін анықтау (sizeof()).
Біріктіру. Деректердің құрылымдалған типінің бір түрі. Құрылымға ұқсас баяндау кезінде құрылымнан ерекшелігі мынада:
Struct кілттік сөзінін орнына Union кілттік сөзі қолданылады.
Union тип_аты
{элементтерді_анықтау};
Біріктірудің құрылымнан айырмашылығы ішкі жадыда ұйымдастыру тәсілдерінен де көрінеді. Біріктірудің барлық элементтері жадыда бір байттан басталады. Айталық, программада құрылым баяндалсын:
Struct S
{ int I;
Char ch;
Long int L;
};
Элементтері жадыда былай орналасады:
байт | байт | байт | байт | байт | байт | байт |
i | ch | L |
Құрылым элементтері сәйкес типтің өлшеміне қарай, жадыда ұяшықты тізбектеле алады. Құрылымның жалпы өлшемі өрістің ұзындығының қосындысына тең.
Енді біріктіруді қарастыралық:
Union S
{ int I;
Char ch;
Long int L;
};
Мұндай типті шама жадыда былай орналасады:
байт | байт | байт | байт |
ch | |||
I | |||
L |
Біріктіру өрісі бір біріне жапсарласады. Жадының біріктіру алған жалпы көлемі ең үлкен өрістің ұзындығына тең.
Біріктерудегі кез келген өрістің мәніндегі өзгеріс басқа өрістер мәндерін өзгертуге әкеп соғады.
Біріктіруге қолданылатын операциялар:
1. біріктірулерді бір біріне меншіктеу;
2. Адресін алу;
3. элементтеріне қатынас құру, құрылымдағы сияқты, (.) немесе (->) арқылы.
Біріктіруді (union) тек бір мәнмен инициализациялауға болады, ол осы біріктірудің бірінші элементіне сәйкес келу керек. Мысалы:
union chislo A = {34 }; // дұрыс нұсқа
union chislo B = {34.56 }; // дұрыс емес
Негізгі әдебиет: 6 [66-71], 11[19-22].
Дата добавления: 2015-09-11; просмотров: 3883;