Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
28
Добавлен:
20.02.2017
Размер:
17.51 Кб
Скачать

6-дәріс.Тақырыбы: Жадылар кластары

Жоспар:

1. Жадылар кластары және программаны өңдеу.

Жады класы айнымалыны қолдану облысын және осы айнымалының

жадыда бар болу ұзақтығын анықтайды. Айнымалыны анықтағанда сәйкес

түйінді сөз арқылы жадының класын көрсетуге болады. Жоғарыда

қарастырған функцияларда қолданылған айнымалылар локальді болып

табылған және олар осы функцияның ішінде ғана анықталған болып

саналған, қайсібір айнымалыны бірнеше функцияларда қолдану үшін

осындай айнымалыларды сыртқы айнымалы ретінде баяндау қажет.

Функцияның сыртында анықталған айнымалылар сыртқы айнымалылар

болып табылады және олардың қолдану облысы глобальді болады. Әрбір

айнымалы анықталған типке және жадының қайсібір класына жатуы тиіс.

28

Жадының класын баяндау үшін төрт түйінді сөз қолданылады: сыртқы

класты баяндау үшін extern түйінді сөзі , автоматты класс үшін-auto сөзі,

статикалық класты баяндау үшін- static сөзі және регистрлік класты баяндау

үшін- register сөзі. Анықталған жады класына жататын айнымалылардың

қасиеттерін қарастырайық.

Автоматтық айнымалылар. Функцияның ішінде баяндалған

айнымалылар auto класына жатады деп есептелінеді, егер жады класының

басқа айқын баяндауы болмаса, онда функцияда баяндалған айнымалылар

автоматты болады. Кейде айнымалыны берілген функцияның ішінде ғана

баяндалғанын көрсету үшін auto сөзін қолданау арқылы баяндайды. Аuto

түйінді сөзі баяндалған айнымалыдағы айнымалы типінің

спецификациясының алдында көрсетіледі. Автоматты айнымалылардың

қолдану облысы локальді болады және осы айнымалы баяндалған функция

шақырылғанда көрсетілген автоматтық айнымалылар активтенеді.

Функцияның жұмысы аяқталғанда автоматтық айнымалылар жойылады, ал

осы автоматтық айнымалыларға бөлінетін жады ұяшықтары басқа

айнымалылар үшін қайтадан қолданылуы мүмкін. (Функцияның басында

баяндалған айнымалылар функцияның ішінде қатынаса алады)

Сытқы айнымалылар. Функцияның сыртында баяндалған

айнымалылар сыртқы болып табылады. Сыртқы айнымалыны қолданатын

функцияда extern түйінді сөзі арқылы баяндауға болады.

int l;

main()

{ extern int l;

scanf(“%d”,&l);

while(l!=20)

pr();

printf(“Поиск завершен \n”); }

pr()

{ extern int l;

printf(“Введите новое число \n”);

scanf(“%d”,&l); }

Егер pr() функциясында l айнымалының баяндалуы келтірілмесе, онда

l атты сыртқы айнымалы pr() функциясында келісім бойынша белгілі

болады. Егер main() және pr() функцияларында extern түйінді сөзі

функцияның ішіндегі l айнымалының баяндалуында келтірілмесе , онда l

атты жаңа автоматтық айнымалы пайда болады. Бұл функцияларда l атты

сыртқы айнымалы белгісіз болады. Егер pr() функциясында l айнымалының

баяндалуына extern сөзі жазылмаса, онда main() функциясында орналасқан

l айнымалысы ешқашан жаңа мәнді қабылдай алмайды.

Статикалық айнымалылар. Статикалық айнымалылардың қолдану

облысы локальді болады, бірақ автоматты айнымалылардан айырмашылығы:

егер осы айнымалылар баяндалған функция өзінің жұмысын аяқтаса,

статикалық айнымалылар жойылмайды. Функцияның бір шақыруынан

29

келесі шақыруына дейін компилятор статикалық айнымалылардың мәндерін

сақтайды.

main( )

{ int k;

for (k=1; k<=5; k++)

{ printf (“Интерация %d:\n”,k);

prnv( ); }

}

prnv( )

{ int av=1;

static int stv=1;

printf(“av=%d stv=%d\n”, av++, stv++); }

Айнымалының мәні баспаға шығарылғаннан соң prnv( ) функциясы әрбір

айнымалыны көбейтіп отырады. av айнымалысының бастапқы мәні әркезде

қайтадан орнатылады, ал stv статикалық айнымалысының мәні 1 бойынша

көбйгенін «есте сақтайды». Бұл инициализациядағы ерешелікті көрсетеді:

prnv( ) функциясы шақырылған сайын av қайтадан инициалданады, ал stv

prnv( ) функциясының компиляциясы кезінде ғана бір-ақ рет

инициалданады.

1-ші итерация:

av=1 stv=1

2-ші итерация:

:

av=1 stv=2

3-ші итерация:

:

av=1 stv=3

4-ші итерация:

:

av=1 stv=4

5-ші итерация:

:

av=1 stv=5

6-ші итерация:

:

av=1 stv=6

Регистрлік айнымалылар. Әдетте программада баяндалған

айнымалылар машинаның жадысында сақталады. Регистрлік айнымалылар

орталық процессордың ргистрлерінде сақталады, осындай айнымалыларды

пайдаланғанда программаның жұмысы жылдамырақ орындалады. Жалпы

жағдайда регистрлік айнымалылар автоматтық айнымалыларға ұқсас. Олар

келесі түрде құрылады:

main()

30

{ register int rv;

……….. }

Егер регистрлік айнымалының баяндалуы бар болса, онда компилятор

баяндалу талаптарын пайдалануға мүмкін бос болатын регистлердің

санымен салыстырады. Егер келтірілген талаптарды орындауға мүмкіндік

болмаса, онда айнымалы автоматтық айнымалы ретінде пайдаланылады.

Жадылар

кластары

Кілтті сөздер Бар болу

ұзақтығы

Әрекеттесу

облысы

Автоматты Auto Уақытша Локальді

Регистрлік Register Уақытша Локальді

Статикалық Static Тұрақты Локальді

Сыртқы extern Тұрақты Глобальді (барлық

файлдары)

Сыртқы

статикалық

static Тұрақты Глобальді (бір

файл)