Još malo o podacima, operatorima, ...

3. Inkrement i dekrement

Programski jezik C uvodi i dva nova aritmetička operatora:

  • inkrement (++) – što znači uvećaj varijablu za jedan
  • dekrement (--) – što znači umanji varijablu za jedan.

 Oba se operatora mogu pisati ispred (prefix) varijable ili iza varijable (postfix). Dakle, naredba x = x + 1;  isto je što i x++; odnosno ++x;. Isto tako i naredba x = x - 1;  isto je što i x--; odnosno --x;

Pojasnimo naredbu x = x + 1;

U matematici bi ovakva konstrukcija bila neispravna jer je znak = u matematici znak jednakosti. U programiranju znak = je operator pridruživanja koji varijabli s lijeve strane pridružuje vrijednost izraza na desnoj strani. Dakle, naredbom x = x + 1; dohvaća se  trenutna vrijednost varijable x iz memorije,  pribraja joj se vrijednost 1 i nakon toga se nova vrijednost pohranjuje u memoriju na mjesto varijable x.

Ako je x = 10, onda će nakon naredbe x++; vrijednost varijable x biti 11. Isto tako, nakon naredbe ++x; vrijednost varijable x bit će 11.

U tom je slučaju svejedno s koje se strane nalazi operator.

Međutim, uporabom navedenih operatora u izrazima stvari se mijenjaju. O položaju operatora u odnosu prema varijabli ovisi kada će se vrijednost varijable povećati (ili smanjiti).

Ako se operator ++ (ili --) nalazi ispred varijable, tada se vrijednost varijable najprije poveća (smanji), a zatim se uvećana (umanjena) vrijednost koristi u izrazu.

Ako je operator ++ (ili --) iza varijable, tada se u izrazu uzima trenutačna vrijednost varijable, a nakon izračunavanja uveća se (smanji) vrijednost varijable.

Utjecaj položaja operatora na promjenu varijable naziva se side effect.

 

Primjer

Neka je x = 2.

Naredba y = ++x; znači da se prvo varijabla x povećava za 1 (x=x+1;), a nakon toga vrijednost nove varijable x pridružuje se varijabli y (y=x;). Dakle, obje će varijable na kraju imati istu vrijednost (x=3; y=3;).

Naredba y = x++; znači da se prvo trenutačna vrijednost varijable x pridružuje varijabli y (y=x;), a nakon toga se vrijednost varijable x povećava za 1 (x=x+1;). Dakle, na kraju će varijabla x imati vrijednost 3, a varijabla y vrijednost 2.

Inkrement i dekrement ne mogu se primijeniti na aritmetičke izraze ni na konstante. Dakle, pogrešno je (x+y)++; ili 1.234--;

Operatori inkrement i dekrement znatno olakšavaju pisanje programa, poboljšavaju razumljivost i preglednost kôda, ali tijekom njihove uporabe treba se voditi računa o prethodno navedenom.