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.