Адресна аритметика

Показивачи у језику C су прости подаци, па се могу изводити и неке операције над њима. Те операције су:

  • додељивање вредности једног показивача другом

  • израчунавање збира и разлике показивача и целобројног податка

  • израчунавање разлике два показивача

  • упоређивање два показивача

  • упоређивање показивача са нулом.

Оператором = може се вредност једног показивача датог типа доделити показивачу истог типа. После тога ће оба показивача показивати на исти податак. Грешка је ако показивачи нису истих типова.

Јединица мере сабирања и одузимања вредности показивача и целог броја је величина показиваних података. Ова особина омогућава да се показивачи користе у раду са низовима, који представљају структуре података које су смештене на узастопним меморијским локацијама. Више о вези показивача и низова – кад будемо радили низове. Осим оператора сабирања и одузимања, дозвољено је примењивати операторе инкрементирања (++) и декрементирања (–) на показиваче, али само ако је то показивач на низ.

Дозвољено је одузимати оператором – и упоређивати релацијским операторима <, <=, > и >= два показивача истог типа који показују на исти низ.

Релацијским операторима == и != дозвољено је упоређивати два показивача истог типа. Тако се добија одговор на питање да ли оба показивача показују на исти податак или не. Због тога се ови оператори могу примењивати и на независне показиваче!

Дозвољено је показивачу произвољног типа доделити нулу и упоређивати га са нулом. Вредност нула означава да показивач не показује ни на један податак. Упоређивање са нулом даје одговор на питање да ли показивач показује на неки податак или не. Уместо ознаке 0, за показиваче се користи ознака NULL и та ознака говори да показивач не показује ни на један податак. Ознака NULL дефинисана је у заглављима stdio.h и stdlib.h

пример приказује зашто је погрешно доделити вредност показивача једног типа показивачу другог типа:

#include<stdio.h>
main()
{
float x=1.23; /* podatak tipa float */
float *pd1,*pd2; /* dva pokazivaca na podatke tipa float */
int *pi; /* pokazivac na podatke tipa int */
pd1=&x; /* pd1 pokazuje na x */
pd2=pd1; /* pd2 pokazuje na x */
printf("pd1 pokazuje na %f,\t a pd2 pokazuje na %f\n",*pd1,*pd2);
/* pi=pd1; /* pokazivaci razlicitih tipova! */
pi=(int *)pd1; /* ovako moze, na odgovornost programera */
printf("%d\n",*pi); /* nije jasno sta ce se ispisati */
}
Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s