Кіріспе

C бағдарламалау тіліндегі құрылымды тип

C бағдарламалау тіліндегі (және көптеген туындыларындағы) құрылым – жад блогында бір атаумен физикалық тұрғыдан топтастырылған айнымалылар тізімін анықтайтын, әртүрлі айнымалыларға бір сілтеме арқылы немесе құрылымның аталған аты арқылы қол жеткізуге мүмкіндік беретін, бірдей мекенжайды қайтаратын құрамдас дерек типі (немесе жазба) болып табылады. Struct дерек типі басқа дерек типтерін қамтуы мүмкін, сондықтан ол қатты дискідегі каталог жазуы (файл ұзындығы, атауы, кеңейтімі, физикалық мекенжайы және т.б.) сияқты аралас дерек типтерінің жазбалары үшін немесе басқа аралас типтегі жазбалар (атауы, мекенжайы, телефоны, балансы және т.б.) үшін қолданылады. C құрылымы сөз ұзындығы шекараларымен әдетте шектелетін (өлшемделген) физикалық жадтың үзділіссіз блогына тікелей сілтеме жасайды. Ол Intel процессорлары үшін кейбір құрастырушылардағы ұқсас аталатын мүмкіндікке сәйкес келеді. Ұзділіссіз жад блогы болғандықтан, құрылымдағы әрбір өріс бастапқыдан белгілі бір тұрақты смещенияда орналасқан. Struct мазмұны үзділіссіз жадта сақталғандықтан, primitives үшін қолданылатындай, нақты бір типті struct сақтау үшін қажетті байттар санын алу үшін sizeof операторын пайдалану керек. Struct-тегі нақты өрістердің сәйкестендірілуі (сөз шекараларына қатысты) жүзеге асыруға байланысты болып табылады және толтыруды қамтуы мүмкін, бірақ қазіргі заманғы компиляторлар әдетте #pragma pack директивасын қолдайды, ол сәйкестендіру үшін қолданылатын байттардағы өлшемді өзгертеді. C++ тілінде struct C++ класына ұқсас, бірақ әдепкі көріну мүмкіндігі басқаша: кластың мүшелері әдепкі бойынша жеке, ал struct мүшелері әдепкі бойынша қоғамдық.

Басқа тілдерде

C тіліндегі struct дерек типі ALGOL 68 тіліндегі struct дерек типінен туындаған. C-дегі құралас дерек типіне ұқсас, C#-тағы struct дерек типі (Visual Basic NET-тегі құрылым) сыныпқа ұқсас. Бұл тілдерде struct пен сынып арасындағы ең басты айырмашылық – struct функцияға аргумент ретінде жіберілгенде, сол функциядағы struct-қа енгізілген өзгерістер бастапқы айнымалыға әсер етпейді (егер сілтеме арқылы жіберілмесе). Бұл C++ тілінен өзгеше, онда сыныптар немесе struct-тар статикалық немесе динамикалық түрде стекте (C#-қа ұқсас) немесе үйіндіде, тікелей сілтеме арқылы орналастырылуы мүмкін. C++ тілінде struct пен сыныптың арасындағы жалғыз айырмашылық – struct-тың мүшелері мен негізгі сыныптары әдепкі бойынша ашық болады. (class кілт сөзімен анықталған сыныптың мүшелері мен негізгі сыныптары әдепкі бойынша жеке болады.)