Си тіліндегі құрылымдар
[quote] «Си тіліндегі құрылымдар»
1.1. «Құрылымды анықтау»
Әр түрлі мәліметтерді баяндау үшін және жаңа типтерді ұйымдастыру үшін құрылымды пайдаланған ыңғайлы болып табылады. Құрылымды келесі түрде баяндауға болады:
Struct ;
{
;
}
Мұндағы rname – құрылым аты ( құрылым типінің атын көрсетпесе де болады), {} – жүйелік жақшада структура элементтерінің тізбегі және әрбәр элеметтің типі көрсетілген. Құрылым шаблоны анықталғаннан кейін құрылымдық айнымалының анықталуы келесі түрде жазылады:
struct;
vnames- құрылымдық айнымалының аты.
Мысалы:
Struct sved
{
Char fam[25];
Char adr[20];
Int gr;
};
Struct sved inf;
Құрылымды функция денесінде немесе функцияның сыртында баяндауға болады. Функцияның ішінде баяндалған құрылымды тек осы функкцияның ішінде ғана пайдалануға болады. Егер құрылым функцияның сыртында баяндалған болса, онда құрылымды басқа функцияларда да қолдануға болады.
Берілген баяндалудан тұратын функция шаблон анықталғаннан кейін орналасады деп жорамалданады. Егер структураны баяндағанда оның шаблоны программаның бір жерінде анықталған болса, ал осы шаблонды пайдаланылатын құрылымдық айнымалылар программаның басқа бір функциясырда анықталатын болса, онда құрылым типінің атын міндетті түрде көрсету қажет. Құрылымдық айнымалының анықталуының пайдаланып, компилятор құрылымдық шаблон бойынша жадыдан орын бөліп береді (құрылымның әрбір элементінің баяндалуын ескереді). Мәліметтер құрылымдарын баяндағанда құрылымдық шаблон анықтауын және құрылымдық айнымалыны анықтау процестерін біріктіруге болады. Айнымалыны және шаблонның анықталуын біріктіргенде құрылым типінің атын жазбаса да болады. Мысал:
Struct
{
char fam[25];
char adr[20];
} inf;
Егер құрылымдық шаблон бір реттен көп қолданылса, онда әдетте құрылым типінің атымен берілетін форманы қолданады.
1.2 «Құрылымды иницалдау»
Сыртқы және статискалық құрылымды айнымалыларды иницалдауға болады. Құрылымдық айнымалының сыртқы типке жататын шаблонның анаықталған орнына байланысты емес, осы айнымалы програманың қандай жерінде анықталғанына байланысты. Келесі бар деп жорамалдайық:
Static struct sved inf= {“Сериков”, “Рыскулов. 55”, 1987}
Мысал: ( құрылым элементтеріне қатынау )
#include
main()
{ char fam[25];
char adr[20];
int gr;
} inf;
printf(“Фамилияңды енгіз : \n”);
gets(inf.fam); /*fam элементіне қатынау*/
printf(“Адресіңді енгіз: \n”);
gets(inf.adr);
printf(“туған жылың : \n”);
scanf(“%d”,&inf,gr);
printf (“%s, %s . %d\n”, inf.fam,inf.adr, inf.gr); }
1.3 «Құрылымдардан құрылған массивтер»
Есептерді шығару барысында құрылымдардан құрылған массивтер пайданылады, яғни құрылымдық айнымалы массивтің элементі болып табылады. Құрылымдардан құрылған массивтер келесі түрде баяндалады:
Struct sved inf[10];
sved типті құрылым inf[10] массивтің элементі болып табылады.
Құрылымдардан құрылған массивтердің элементтерін анықтағанда бөлек алынған құрылым жағдайындадағы сияқты құрылымның аты құрылым элементінің атынан нүкте “.” (элементті алу операциясы ) символ арқылы бөлектенеді. Мысалы:
inf[0].fam- массивтң бірінші элементі
inf[1].fam- массивтің екінші элементі
.................................................................
Құрылымға көрсеткішті қолдану мүмкіндіктерін қарастырайық. Бұған дейін құрылымдарды функция аргументі ретінде қолдануға болмайтынын ескерткенбіз, ал құрылымға көрсеткішті қолдану құрылым элементтеріне көрсеткіш арқылы қол жеткізуге мүмкіндік береді.Көрсеткіш сипаттамасы төменде берілген (бұған дейін қолданған құрылым массивін қарастырайық);
struct knig *ptrst;
knig типті кез-келген құрылымға сілтеуіші ptrst көрсеткіші құрастырылады.
Онда:
ptrst==&masking[0];
*ptrst==masking[0];
ptrst- >author- ал бұл masking[0].author-ға эквивалентті.
Егер ptrst masking[0] құрылымына көрсеткіш болса, онда келесі белгілеулер эквиваленттә:
masking[0].author==(*ptrst).author==->author
ptrst+1 көрсеткіші masking[1]- ге сілтейді.
Айта кету керек, осы мысалда ptrst+1 көрсеткішіне 45-ні қосады, себебі ААА типті кез-келген құрылым 47 байт орын алады.
Құрылым адресі функция аргументі ретінде қолданылатын мысалды қарастырайық.
struct ZP
{ char *name;
Char *MEC;
float NACH;
float PREM; } SOTR={“Зуев П”,”январь” 1020.45,250.15 };
main()
{ float s,fadd();
Printf (“П. Зуевқа қаңтар айында барлығы %6.2a тенге берілде \n”,fadd(&sort)); }
float fadd (ptrst)
struct zp *ptrst;
{ float s=0;
& операциясы құрылым адресін алу үшін қолданрылып отырғанын ескерте кеткенді жөн көрдік, Массив атынан айырмашылығы, құрылым аты өздігінен өз адресінің синонимы бола алмайды. Құрылымдар массивін қарастырайық. Массив аты оның адресінің синонимы бола алады, сондықтан, оры функцияға бере аламыз.
struct zp
{ char *name;
char *MEC;
float NACH;
float PREM; } sort[6]={ {“Зуев П.”,”қаңтар”,8020.45,1250.15},
………………………………………………………………….
Inf[9].fam-массивтің оныншы элементі
(inf[1]- құрылымдық айнымалы аты)
#include
#define num 10
Struct sved
{ char fam[25];
char adr[20];
int gr; };
main()
{ struct sved inf[num];
int 1=0, i;
while (1
Толық нұсқасын 30 секундтан кейін жүктей аласыз!!!
Әлеуметтік желілерде бөлісіңіз:
Facebook | VK | WhatsApp | Telegram | Twitter
Қарап көріңіз 👇
kz | Рефераттар
Пайдалы сілтемелер:
» Туған күнге 99 тілектер жинағы: өз сөзімен, қысқаша, қарапайым туған күнге тілек
» Абай Құнанбаев барлық өлеңдер жинағын жүктеу, оқу
» Дастархан батасы: дастарханға бата беру, ас қайыру
Соңғы жаңалықтар:
» 2025 жылы Ораза және Рамазан айы қай күні басталады?
» Утиль алым мөлшерлемесі өзгермейтін болды
» Жоғары оқу орындарына құжат қабылдау қашан басталады?