Международный гуманитарно-технический



бет28/37
Дата22.06.2023
өлшемі2,73 Mb.
#179096
түріЛекция
1   ...   24   25   26   27   28   29   30   31   ...   37
Байланысты:
konspekt lektsiya-2021-2022

Сытқы айнымалылар. Функцияның сыртында баяндалған айнымалылар сыртқы болып табылады. Сыртқы айнымалыны қолданатын функцияда extern түйінді сөзі арқылы баяндауға болады.
Егер pr() функциясында l айнымалының баяндалуы келтірілмесе, онда l атты сыртқы айнымалы pr() функциясында келісім бойынша белгілі болады. Егер main() жəне pr() функцияларында extern түйінді сөзі функцияның ішіндегі l айнымалының баяндалуында келтірілмесе , онда l атты жаңа автоматтық айнымалы пайда болады. Бұл функцияларда l атты сыртқы айнымалы белгісіз болады. Егер pr() функциясында l айнымалының баяндалуына extern сөзі жазылмаса, онда main() функциясында орналасқан l айнымалысы ешқашан жаңа мəнді қабылдай алмайды.
Статикалық айнымалылар. Статикалық айнымалылардың қолдану облысы локальді болады, бірақ автоматты айнымалылардан айырмашылығы: егер осы айнымалылар баяндалған функция өзінің жұмысын аяқтаса, статикалық айнымалылар жойылмайды. Функцияның бір шақыруынан келесі шақыруына дейін компилятор статикалық айнымалылардың мəндерін сақтайды. Айнымалының мəні баспаға шығарылғаннан соң prnv( ) функциясы əрбір айнымалыны көбейтіп отырады. av айнымалысының бастапқы мəні əркезде қайтадан орнатылады, ал stv статикалық айнымалысының мəні 1 бойынша көбйгенін «есте сақтайды». Бұл инициализациядағы ерешелікті көрсетеді: prnv( ) функциясы шақырылған сайын av қайтадан инициалданады, ал stv prnv( ) функциясының компиляциясы кезінде ғана бір-ақ рет инициалданады. Регистрлік айнымалылар. Əдетте бағдарламада баяндалған айнымалылар машинаның жадысында сақталады. Регистрлік айнымалылар орталық процессордың ргистрлерінде сақталады, осындай айнымалыларды пайдаланғанда бағдарламаның жұмысы жылдамырақ орындалады. Жалпы жағдайда регистрлік айнымалылар автоматтық айнымалыларға ұқсас. Олар келесі түрде құрылады:
main()
{ register int rv;
……….. }
Егер регистрлік айнымалының баяндалуы бар болса, онда компилятор баяндалу талаптарын пайдалануға мүмкін бос болатын регистлердің санымен салыстырады. Егер келтірілген талаптарды орындауға мүмкіндік болмаса, онда айнымалы автоматтық айнымалы ретінде пайдаланылады.
Жадылар кластары Кілтті сөздер Бар болу ұзақтығы Əрекеттесу облысы Автоматты Auto Уақытша Локальді Регистрлік Register Уақытша Локальді Статикалық Static Тұрақты Локальді Сыртқы extern Тұрақты Глобальді (барлық файлдары) Сыртқы тсатикалық static Тұрақты Глобальді (бір файл).
Көрсеткіштер.
Көрсеткіш-айнымалыны баяндау жəне инициалдау. Көрсеткіштер дегеніміз мəндері жады адрестері болатын айнымалыларды айтады. Көрсеткіште нақты мəні бар айнымалының адресі бар болады. Айнымалы мəнге тікелей сілтенеді, ал көрсеткіш мəнге жанама сілтенеді. Мəнге көрсеткіш арқылы жанама сілтеме жанама адрестеу деп аталады. Кез келген айнымалылар сияқты көрсеткіштер де қолданылмас бұрын баяндалуы қажет. int *countPtr, count; операторында int * (бүті санды мəнге көрсеткіш) типті countPtr айнымалысы баяндалған. Баяндалуда * символы countPtr-ге ғана таратылады. Бұл символ баяндалатын айнымалы көрсеткіш екенін көрсетеді. Кез келген типті объектілерге сілтенетін көрсеткіштерді баяндауға болады. Көрсеткіштер баяндалу кезінде немесе меншіктеу операторының көмегімен инициалдануы қажет. Көрсеткіш нөлмен, NULL макросымен немесе адрестің мəнімен инициалдануы мүмкін. NULL мəнді көрсеткіш ешнəрсеге көрсетпейді. 0 мəнді көрсеткіштің инициалдануы NULL тұрақтылы көрсеткіштің инициалдануымен бірдей, бірақ түрленеді. 0 мəні көрсеткіш-айнымалыға тікелей меншіктелетін жалғыз бүтін сан болып табылады.
Көрсеткіштерге қолданатын операциялар. Си тілі көрсеткіштерге 5 негізгі операциялар қолданатынуға болады:
1. Меншіктеу. Көрсеткішке адресті меншіктеуге болады. Массивтің атын немесе NULL-ді қолданған маңыздырақ. 0 мəні меншіктелгенде, ол сəйкес типті көрсеткішке адресті анықтайтын (&) операциясын қолданып, əдетте адресті меншіктеуге болады.
2. Мəнді анықтау. Берілген адрес бойынша қайсібір ұяшықта сақталған мəнді анықтау үшін (*) операциясы қолданылады.
3. Көрсеткіштің адресін анықтау. Көрсеткіш типті айнымалының басқа айнымалылар сияқты адресі жəне мəні болады. & операциясы арқылы көрсеткіштің адресін анықтауға болады.
4. Көрсеткіштерді арттыру. Бұл амал қарапайым қосу операциясы немесе арттыру операциясы арқылы орындалады. Көрсеткішті арттыру арқылы массивтің келесі элементіне өтуге болады.
5. Көрсеткіштердің айырымы. Екі көрсеткіштің айырмасын табуға болады. Əдетте бұлоперация элементтері бір-бірінің арасындағы ара қашықтықты табу үшін бір массив элементтеріне сілтенетін көрсеткіштер үшін орынды. Нəтиже массив өлшемін бар болдыратын айнымалының типіндей болады.
Көрсеткіштерге келесі арифметикалық операцияларды қолдануға болады: ++, --, +, +=, -, -= жəне екі көрсеткіштің айырмасын анықтауға болады.
Мысал ретінде бірінші элементі жадыдағы адресі 3000-ға тең болатын int v[10] массивін анықтаймыз. Инициалданатын адресі мəні v[0] vPtr көрсеткіші , яғни vPtr мəні 3000-ға тең, кез келгені келесі операторлардың бірімен vPtr = v; vPtr = &v[0];
Көрсеткішке бүтін санды қосқаннан немесе азайтқаннан оның мəні бұл санға емес, көрсеткіш сілтенетін объектінің өлшеміне тең санның көбейтіндісіне көбейеді немесе азаяды.
Байт бойынша объектінің өлшемі объекті типіне байланысты. Мысалы, vPtr += 2; операторы 3008 (3000+2*4) нəтижесін береді, егер бүтін сан үшін жадыда 4 байт бөлінсе. Енді vPtr v[0] элементіне сілтенеді.
Егер vPtr v[0] массив элементінің адресіне сəйкес болатын 3016 мəнге дейін көбейген болса, онда vPtr -= 4;
операторы vPtr массивтің басына сəйкес болатын 3000 мəнге қайтарар еді. Көрсеткіш бірге көбейгенде немесе азайғанда инкремент (++) жəне декремент (--) операцияларын қолдануға болады. Əрбір келесі операторлар массивтің келесі элементіне сілтенетін көрсеткіштің мəнін көбейтеді: ++vPtr; vPtr++;
Кез келген келесі операторлар массивтің алдыңғы элементіне қатынасатын көрсеткіштің мəнін азайтады: --vPtr; vPtr--;
Көрсеткіш-айнымалылар бір-бірінен азайтыла алады. Мысалы, vPtr мəні 3000-ға тең болса, ал v2Ptr 3008 адресіне ие болса, онда x = v2Ptr - vPtr; операторының орындалған нəтижесінде х айнымалысына vPtr адресінен бастап v2Ptr адресіне дейін орналастырылған, берілген жағдайда 2 мəні болады, массив элементтерінің саны меншіктеледі.
Екі көрсеткіште бірдей типті болса, көрсеткіш келесі көрсеткішке меншіктеле алады. Қарсы жағдайда оң жақтағы көрсеткіш типті меншіктеу операторын сол жақтағы көрсеткіш типке келтіруоперациясын қолдану керек.


Достарыңызбен бөлісу:
1   ...   24   25   26   27   28   29   30   31   ...   37




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет