Për t'u sqaruar rreth operatorit ++, duhet të dish ndryshimin midis ++i dhe i++. Në të dyja rastet vlera e i rritet me 1, por ajo që ndryshon është koha kur ndodh rritja.
Kur ++ përdoret si parashtesë (++i), në fillim rritet vlera e variablës, pastaj ekzekutohet shprehja që përmban variablën. Për shembull, kodi:
Kodi:
int i = 1;
printf("%d", ++i); /* printon 2 */
është njësoj sikur të kishim shkruar:
Kodi:
int i = 1;
i = i + 1;
printf("%d", i); /* printon 2 */
Kur ++ përdoret si prapashtesë (i++), në fillim ekzekutohet shprehja që përmban variablën, pastaj rritet vlera me një. Për shembull, kodi:
Kodi:
int i = 1;
printf("%d", i++); /* printon 1 */
printf("%d", i); /* printon 2 */
është njësoj sikur të kishim shkruar:
Kodi:
int i = 1;
printf("%d", i); /* printon 1 */
i = i + 1;
printf("%d", i); /* printon 2 */
Në kodin që kishe hedhur ti, shprehja:
shtypja_pjesore = shtyp_invers(fjala+1);
nuk ndryshon vlerën e fjala, por argumentit të funksionit. Kompjuteri krijon një variabël të re për argumentin, bën mbledhjen, dhe pastaj thërret funksionin shtyp_invers().
Nëse kodi do ishte ndryshuar si
shtypja_pjesore = shtyp_invers(fjala++);
kompjuteri do thërrasë funksionin me vlerën e variablës fjala, pastaj e rrit vlerën e fjala-s. Pra, në këtë rast, kompjuteri do thërriste shtyp_invers gjithnjë me të njëjtën variabël deri sa të mbushet stack-u dhe të nxjerrë gabim.
Krijoni Kontakt