Құрылым - бұл бір атпен ұсынылған әр түрлі деректер түрлерінің айнымалылар тобы. C бағдарламасында құрылымның қажеттілігін түсіну үшін мысал келтірейік.
Студенттің аты, жасы, мекен-жайы, идентификаторы сияқты студенттердің деректерін сақтау керек деп айтуға болады. Мұны істеудің бір жолы әр атрибут үшін басқа айнымалы мәнді жасайды, бірақ бірнеше оқушылардың мәліметтерін сақтау керек болғанда әр жағдайда әрбір оқушыға осы бірнеше айнымалыларды жасау қажет болады. Бұл деректерді осылайша сақтау үшін мұндай үлкен бас ауруы.
Біз құрылымды пайдалану арқылы бұл мәселені оңай шеше аламыз. Біз атын, идентификаторын, мекен-жайы мен жасын құрайтын құрылымды құра аламыз, содан кейін әрбір құрылымға осы құрылымның айнымалыларын жасай аламыз. Бұл шатастыратын көрінуі мүмкін, мысал арқылы оны түсінетінімізге алаңдамаңыз.
C бағдарламасында құрылымды қалай құруға болады
Біз C құрылымын құру үшін кілт сөзді қолданамыз. Құрылым кілт сөзі құрылымдық деректер түрінің қысқа нысаны болып табылады .
struct struct_name {DataType member1_name;DataType member2_name;DataType member3_name;... };
Мұнда struct_name сіз таңдаған нәрсе болуы мүмкін. Мүшелердің деректер түрі бірдей немесе әр түрлі болуы мүмкін. Біз құрылымды жариялағаннан кейін, struct атауын int, float және т.б. сияқты деректер түрінде пайдалануға болады.
Алдымен біз құрылымдық айнымалыларды құрудың синтаксисін көреміз, құрылымдық мүшелерге қатынасамыз және т.б., содан кейін толық мысалды көреміз.
Құрылымның айнымалысын қалай жариялауға болады?
struct_name var_name;
немесе
struct struct_name {DataType member1_name;DataType member2_name;DataType member3_name;... } var_name;
Құрылымның деректер элементіне құрылымдық айнымалыны қалай қол жеткізуге болады?
var_name.member1_name; var_name.member2_name; ...
Құрылым мүшелеріне мәндерді қалай тағайындауға болады?
Мұны істеудің үш жолы бар.
1) Dot (.) Операторын пайдалану
var_name.memeber_name = мән;
2) Бір өтініште тағайындалған барлық мүшелер
struct_name var_name = {memeber1 мәні, memeber2 үшін мән ... барлық мүшелер үшін де}
3) тағайындалған инициаторлар - біз осы лауазымның соңында кейінірек талқылайтын боламыз.
С құрылымының мысалы
#include <stdio.h> / * Мұнда құрылым құрылды. Құрылымның аты-жөні * StudentData. * / struct StudentData { char * stu_name; int stu_id; int stu_age; }; int main () { / * студент StudentData * / құрылымның айнымалысы * struct StudentData студенті; / * Әрбір құрылымдық мүшенің мәндерін тағайындау * / student.stu_name = «Стив»; student.stu_id = 1234; student.stu_age = 30; / * Құрылымдық мүшелердің мәндерін көрсету * / printf («Оқушының аты:% s», student.stu_name); printf («\ nСтудент Id:% d», student.stu_id); printf («\ nСтуденттің жасы:% d», student.stu_age); 0 қайтару; }
Шығару:
Студенттің аты-жөні: Стив Студент идентификаторы: 1234 Студенттік жас шамасы: 30
C ішіндегі кірістірілген құрылым: Басқа құрылымдағы құрылым
Құрылымды басқа құрылымның ішінде қолдануға болады, бұл өте мүмкін. Жоғарыда түсіндірілгендей, құрылымды жариялағаннан кейін, struct_name құрылымы жаңа деректер түрі ретінде жұмыс істейді, осылайша оны басқа құрылымдарда басқа деректер мүшелерінің деректер түріне қосуға болады. Шатастыратыны ма? Алаңдатпаңыз. Төмендегі мысал сіздің күмәніңізді түсіреді.
Бағдарламалаудағы кірістірілген құрылымның мысалы
Айталық, бізде екі құрылым бар:
Құрылымы 1: stu_address
struct stu_address { int street; char * жағдайы; char * қала; char * елі; }
Құрылым 2: stu_data
struct stu_data { int stu_id; int stu_age; char * stu_name; struct stu_address stuAddress; }
Мұнда басқа құрылымның ішіндегі құрылымды кірістіргенімді көріп отырсыз.
Құрылым ішіндегі құрылымға арналған тағайындау (кірістірілген құрылым)
Логиканы түсіну үшін жоғарыда көрген екі құрылымның үлгісін алайық
struct stu_data mydata; mydata.stu_id = 1001; mydata.stu_age = 30; mydata.stuAddress.state = «UP»; // кірістірілген құрылымдық тапсырма ..
Ішкі құрылым мүшелеріне қалай кіруге болады?
«.» Операторының тізбегін пайдалану.
Қаланы тек қана салынған құрылымнан көргіңіз келеді делік -
printf («% s», mydata.stuAddress.city);
Құрылымда typedef пайдалану
typedef кодты қысқартады және оқылымдылықты жақсартады. Жоғарыда келтірілген талқылауда біз құрылымды әр уақытта кодты шатастыратын, ұзын, күрделі және аз оқылатын етіп жасайтын ұзақ синтаксисті пайдалану керек екенін көрдік. Бұл мәселе қарапайым шешім typedef пайдалану болып табылады. Бұл құрылымның бүркеншік сияқты.
Typedef жоқ код
struct home_address { int local_street; char * қала; char * my_city; char * my_country; }; ... struct home_address var; var.town = «Агра»;
Tyepdef арқылы код
typedef struct home_address { int local_street; char * қала; char * my_city; char * my_country; } addr; .. .. addr var1; var.town = «Агра»;
Құрылымдық айнымалы мәнді жариялау қажет болғанда, struct home_address пайдаланудың орнына, біз анықталған typedef, addr-ды қолдануға болады.
Құрылым мүшелерінің мәндерін орнату үшін тағайындалған инициализаторлар
Біз құрылымдық мүшенің құндылықтарын орнатудың екі әдісін үйрендік, тағайындалған инициаторларды қолданудың тағы бір жолы бар. Бұл құрылымның тек бірнеше мүшелерін тағайындау кезінде пайдалы. Келесі мысалда s2 құрылымның айнымалысы тек бір мүше тағайындауға ие.
#include <stdio.h> құрылымдық сандар {int num1, num2; }; int main () {// тағайындалған инициализацияны пайдалану арқылы тағайындауқұрылымдар саны s1 = {.num2 = 22, .num1 = 11};құрылымдар саны s2 = {.num2 = 30}; printf («num1:% d, num2:% d \ n», s1.num1, s1.num2);printf («num1:% d», s2.num2);0 қайтару; }
Шығару:
num1: 11, num2: 22 №1: 30
Сізге алғысымызды білдіреміз. Менің шағын жобаларым сіздің мысалдарыңызды көргеннен кейін жеңілірек болды.