-->
Главная » Статьи » Информатика

КӨРСЕТКІШТЕР

КӨРСЕТКІШТЕР

 

Көрсеткіш - бұл айнымалы адресінен тұратын айнымалы. Көрсеткіштер Си-де кеңінен пайдаланылады, бір жағынан кейбір жағдайларда да оларсыз мүмкін емес, ал бір жағынан программалар олармен қысқа және тиімді құрылады. Белгілі тәртіпті көрсеткіштердің көмегімен сақтау кезінде түсініктілікке пен қарапайымдылыққа жетуге болады.

Типтік машинаның жадысы -  бұл жеке немесе байланысқан бөлішектермен жұмыс істеуге болатын, тізбекті көшірілген және адрестелген ұяшықтар массиві. Кез-келген машинаға келесі айтылымдар ақиқат болады: бір байт char  типіндегі мәнді сақтай алады, екібайттық ұяшықтар short типіндегі бүтін ретінде қарастырыла алады, ал төртбайттық – long типіндегі бүтін ретінде. Көрсеткіш – бұл адрес сақталына алатын ұяшықтар тобы (екі немесе төрт ережесі бойынша).

Келесі декларациялар болсын:

   int x=1, y=2, z[10];

   int *ip;                                     //ip –int-ке көрсеткіш

int *ip (* белгісі айнымалы)

 

Унарлы оператор &(амперсандобъектінің адресін бередіУнарлы оператор * сілтемені ашу операторы. Бұл оператор көрсеткішке ғана қолданылады және көрсеткіш жіберетін объектінің мазмұнын береді.

Келесі бірнеше жолдар * және & операторлары қалай қолданылатынын көрсетеді.

ip=&x;           // көрсеткішке х айнымалысының адресі меншіктелген ip - х-ті көрсетеді

y=*ip;             // y енді 2-ге емес, 1-ге тең

*ip=0;             // х енді 0-ге тең

ip=z;               // ip - z (бастапқы) массивінің 0 –ші элементін көрсетеді.

            ip = &z [5]; // ip - енді z массивтің 5 элементін көрсетеді.

Бұдан көрсеткіш айнымалысы декларацияның синтаксисі, бұл айнымалы кездесуі мүмкін болатын "синтаксис” өрнегіне бейімделеді. Көрсетілген принципті функцияны сипаттау қатынасында да қолданамыз. Мысалы, double *dp, atof(char*) жазбасы *dp және atof (s) өрнегі double типінен екендігін, ал atof функциясының аргументі char-дың көрсеткіші (нақты түрде, стрингті көрсету) екенін білдіреді.

Көрсеткішке берілген типтің объектісіне ғана жіберілуіне рұқсат етілген.

void-тың көрсеткіші кез-келген типті объектіге сілтенуі мүмкін, бірақ мұндай көрсеткішке сілтемені ашу операторын қолдануға болмайды.

Көрсеткіштердің өзі айнымалылар болғандықтан, мәтінде олар сілтемені ашу операторынсыз да  кездесуі мүмкін.

Си-де функциялар өзінің аргументтері ретінде параметрлер мәнін қабылдайтын болғандықтан, тікелей мүмкіншілік шақырылатын функцияда айнымалыны өзгертуге болмайды.

Қажетті нәтижені алу үшін, шақырылатын программада өзгертілуі тиісті мәнге көрсеткіштерді беру қажет. Бұл жағдайда шақырылатын функция формальды параметрлердің  көрсеткіштер ретінде сипатталуы қажет, бұдан параметрлердің мәніне қатынасу олар арқылы жанама түрде жүргізіледі. Формальды параметрлер – шақырылатын функцияда оның программасын шақыратын объектіге қатынасуды жүзеге асыратын көрсеткіштер және осы объектілерді өзгертуге мүмкіндік береді.

Программада сұрыптауды екі реттелмеген элементтердің орнын ауыстыратын swap функциясы арқылы орындалатынын қарастырайық.

Егер  swap функциясы келесі түрде анықталса:

   void swap (int x, int y)

{ int temp;

   temp=x; x=y; y=temp;

}

онда swap(a,b)-ны шақыру a мен b айнымалыларына ешқандай әсер етпейді, swap олардың мәндерінің көшірмесін ғана алады.Нәтижеге жету үшін алмастырулар, swap функциясының формальды параметрлері көрсеткіш ретінде сипатталуы керекалфункцияны шақырудағы аргументтер , swap (&a, &b)-ның сәйкес параметрлерінің адрестерімен көрсетілуі тиіс..

void swap (int *px, int *py)

{int temp;

   temp=*px; *px=*py; *py=temp;

}

Си-де көрсеткіштер мен массивтердің арасында байланыс барбайланыс өте тығыз болғандығы соншалықтыбұлқұралдарды бірге қарастырған дұрысИндекстеу операциясынан басқа массивтің элементтеріне қатынасу көрсеткіштерініңкөмегімен орындалуы мүмкін және мұндай вариант жылдамырақ жұмыс жасайды.

int ar[10] декларациясы 10 өлшемді ar массивті анықтайдыяғни ar[0], ar[1],…,ar[9] атымен берілген 10 бөліктен тұратынобъектілер тізбегі. ar[i]  жазбасы массивтің і-ші элементін білдіреді.

Егер pa int көрсеткіші болсаяғни былайша анықталса

int * pa;

онда меншіктеу нәтижесінде pa=&a[0];  pa көрсеткіші  ar-дің нөлінші элементін көрсетеді (сілтейді); басқаша айтқанда , pa ar[0] элементінің адресінен тұрады.

 x=* pa меншіктеулі; ar[0] –нің мәнін х-ке көшіреді.

Егер  pa массивтің кейбір элементін көрсетсеонда pa+1 анықтама бойынша келесі элементті көрсетеді,  pa+i –p-дан кейінгіi-ші элементтіал pa-і-ра-ның алдындағы і-ші элеметті көрсетеді.Бұданегер ра ar[0]-ді көрсетсеонда *( pa+1) - ar[1]-дің мәні, pa+i –  ar[i]-дің адресіа *(pa+i) –ar[i]-дің мәні болады.

Бұданмассивтің элементтері бірдей жылжытып қою көрсеткіші түрінде және индексімен берілген массив түріндебейнеленеді.

Көрсеткіш - бұл айнымалыал массивтің аты - бұл тұрақтылы көрсеткішосы тұрғыдан ра=а немесе ра++ деп жазуғаболадыал аr=ра немесе аr++ жазбасы қателік тудырады.

Егер массивтің аты функцияға берілсеонда соңғысы аргумент ретінде оның бастапқы элементінің адресін алады.Шақырылатын функцияның ішінде бұл аргумент адрестен тұратын жергілікті айнымалы болып табыладыЖалпыфункциямассивтің атын өзінің аргументі ретінде қарастыра аладыөйткені оған массив аты сияқты  ( char s [ ]), немесе көрсеткішретінде  char *s) ыңғайлыжәне олармен сәйкес жұмыс жасайдыФункция сондай-ақ жазбаның екі түріндеегерде оған бұлқолайлы болып көрінсе қолдана алады.

Категория: Информатика | Добавил: admin_ (17.11.2013)
Просмотров: 1614 | Теги: КӨРСЕТКІШТЕР қазақша | Рейтинг: 0.0/0
Всего комментариев: 0

Имя *:
Email:
Код *: