Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
texpr_wpor.docx
Скачиваний:
20
Добавлен:
13.03.2015
Размер:
113.63 Кб
Скачать

Си тіліндегі көрсеткіштер.

Кµрсеткіштер дегеніміз мєндері жады адрестері болатын айнымалыларды айтады. Кµрсеткіште наќты мєні бар айнымалыныњ адресі бар болады. Айнымалы мєнге тікелей сілтенеді, ал кµрсеткіш мєнге жанама сілтенеді. Мєнге кµрсеткіш арќылы жанама сілтеме жанама адрестеу деп аталады.

Кез келген айнымалылар сияќты кµрсеткіштер де ќолданылмас б±рын баяндалуы ќажет.

int *countPtr, count;

операторында int * (б‰ті санды мєнге кµрсеткіш) типті countPtr айнымалысы баяндалѓан. Баяндалуда * символы countPtr-ге ѓана таратылады. Б±л символ баяндалатын айнымалы кµрсеткіш екенін кµрсетеді. Кез келген типті объектілерге сілтенетін кµрсеткіштерді баяндауѓа болады.

Кµрсеткіштер баяндалу кезінде немесе меншіктеу операторыныњ кµмегімен инициалдануы ќажет. Кµрсеткіш нµлмен, NULL макросымен немесе адрестіњ мєнімен инициалдануы м‰мкін. NULL мєнді кµрсеткіш ешнєрсеге кµрсетпейді. 0 мєнді кµрсеткіштіњ инициалдануы NULL т±раќтылы кµрсеткіштіњ инициалдануымен бірдей, біраќ NULL-ді ќолданѓан мањыздыраќ. 0 мєні меншіктелгенде, ол сєйкес типті кµрсеткішке т‰рленеді. 0 мєні кµрсеткіш-айнымалыѓа тікелей меншіктелетін жалѓыз б‰тін сан болып табылады.

Кµрсеткіштерге ќолданатын операциялар

Си тілі кµрсеткіштерге 5 негізгі операциялар ќолданатынуѓа болады:

1. Меншіктеу. Кµрсеткішке адресті меншіктеуге болады. Массивтіњ атын немесе адресті аныќтайтын (&) операциясын ќолданып, єдетте адресті меншіктеуге болады.

2.Мєнді аныќтау. Берілген адрес бойынша ќайсібір ±яшыќта саќталѓан мєнді аныќтау ‰шін (*) операциясы ќолданылады.

3.Кµрсеткіштіњ адресін аныќтау. Кµрсеткіш типті айнымалыныњ басќа айнымалылар сияќты адресі жєне мєні болады. & операциясы арќылы кµрсеткіштіњ адресін аныќтауѓа болады.

4.Кµрсеткіштерді арттыру. Б±л амал ќарапайым ќосу операциясы немесе арттыру операциясы арќылы орындалады. Кµрсеткішті арттыру арќылы массивтіњ келесі элементіне µтуге болады.

5.Кµрсеткіштердіњ айырымы. Екі кµрсеткіштіњ айырмасын табуѓа болады. Єдетте б±л операция элементтері бір-бірініњ арасындаѓы ара ќашыќтыќты табу ‰шін бір массив элементтеріне сілтенетін кµрсеткіштер ‰шін орынды. Нєтиже массив µлшемін бар болдыратын айнымалыныњ типіндей болады.

Кµрсеткіштергекелесіарифметикалыќ операцияларды ќолдануѓа болады: ++, --, +, +=, -, -= жєне екі кµрсеткіштіњ айырмасын аныќтауѓа болады.

1.#include<conio.h>

2.#include<stdio.h>

3.define n 4

4.main()

5.{

6.clrscr();

7.int x[n],I,s,j,*ptr;

8.printf(“Input massiv\n”);

9.for(i=0;i<n;i++)

10.scanf(“%d”,&x[i]);.

11.ptr=x; s=1;

12.for(i=0;i<n;i++)

13.if (n>=2)

14.s*=*(ptr+i)+*(ptr+2*n-1+i);

15.printf(“%s=%d\n”,s);

16.getch()

17.Return 0;

18.}

Жадының кластары auto,static,extern,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 айнымалысы ешќашан жања мєнді ќабылдай алмайды.

Сыртќы айнымалылар. Функцияныњ сыртында баяндалѓан айнымалылар сыртќы болып табылады. Сыртќы айнымалыны ќолданатын функцияда 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 айнымалысы ешќашан жања мєнді ќабылдай алмайды.

Статикалыќ айнымалылар. Статикалыќ айнымалылардыњ ќолдану облысы локальді болады, біраќ автоматты айнымалылардан айырмашылыѓы: егер осы айнымалылар баяндалѓан функция µзініњ ж±мысын аяќтаса, статикалыќ айнымалылар жойылмайды. Функцияныњ бір шаќыруынан келесі шаќыруына дейін компилятор статикалыќ айнымалылардыњ мєндерін саќтайды.

Мысал

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()

{ register int rv;

……….. }

.Кесте 3–Жады кластары

Жады кластары

Кілтті сµздер

Бар болу ±заќтыѓы

Єрекеттесу облысы

Автоматты

Auto

Уаќытша

Локальді

Регистрлік

Register

Уаќытша

Локальді

Статикалыќ

Static

Т±раќты

Локальді

Сыртќы

extern

Т±раќты

Глобальді (барлыќ файлдары)

Сыртќы статикалыќ

static

Т±раќты

Глобальді (бір файл)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]