←  Tutoriale

AMXX.pl: Support AMX Mod X i SourceMod

»

a++ czy ++a?

  • +
  • -
grankee - zdjęcie grankee 21.09.2008

Zapewne wielu z was spotkało się z czymś takim:
zmienna++
oraz takim
++zmienna

Wielu z was pewnie zastanawiało się jaka jest różnica.

Różnica polega na tym, że jeśli damy ++zmienna to najpierw zmienna zwiększy się o 1 a dopiero po tym zostanie użyta, a jeśli damy zmienna++ to najpierw zmienna zostanie użyta a dopiero po tym zwiększy się o 1.

Podam przykład:
new a=4     //tutaj a = 4
new b=++a     //tutaj a zwiększa się o 1 i ta wartość zostaje przypisana do b (czyli a+1=4+1=5):b=5
new c=7    //tutaj c=7
new d=c++     //tutaj wartość c (czyli 7) zostaje przypisana do d (czyli d=7) a następnie wartość c zostaje zwiększona o 1 (c=8, ale d=7)


Mam nadzieję, że pomoże to niektórym :)
Odpowiedz

  • +
  • -
choyrack - zdjęcie choyrack 21.09.2008

Może jakiś prostszy przykład

new a=4
console_print(0,"%d",a++)//to wypisze nam liczbe 4
a=4
console_print(0,"%d",++a)//a to wypisze nam liczbe 5
Odpowiedz

  • +
  • -
wizu - zdjęcie wizu 21.09.2008

To ja poproszę teraz łopatologicznie.
Dlaczego przy tym:

console_print(0,"%d",a++)//to wypisze nam liczbe 4

Będzie 4? Po co w takim razie w ogóle używać tego a++ skoro to nic nie zmienia?
Odpowiedz

  • +
  • -
hq - zdjęcie hq 21.09.2008

Dobre pytanie ...
Odpowiedz

  • +
  • -
GuTeK - zdjęcie GuTeK 21.09.2008

zmienia się..
new a=4 // jak widzicie a=4
console_print(0,"%d",a++)
i a dopiero bedzie mialo wartosc 5 kiedy zostanie 2 raz uzyta konsola przyklad jezeli bysmy wpisaly taki kod
new a=4
console_print(0,"%d",a++) // a=4
console_print(0,"%d",a++) // a=5
console_print(0,"%d",a++) // a=6
console_print(0,"%d",a++) // a=7

wartosc a jest dopiero zmienianna przy uzyciu czegos np jak tutaj wyswietlaniu jakiegos tekstu w konsoli i jak wyswietlimy to dopiero wartosc a zostanie zmieniona
Odpowiedz

  • +
  • -
choyrack - zdjęcie choyrack 21.09.2008

Tam się mało precyzyjnie wyraziłem tutaj będzie już wszystko jasne:
new a=4
console_print(0,"%d",a++)//to wypisze nam liczbe 4
console_print(0,"%d",a)//to wypisze nam liczbe 5
console_print(0,"%d",++a)//a to wypisze nam liczbe 6
console_print(0,"%d",a)//a to tez wypisze liczbe 6
Odpowiedz

  • +
  • -
wizu - zdjęcie wizu 22.09.2008

Teraz tak, dzięki.
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 22.09.2008

Tylko, że ja to wszystko napisałem w pierwszym poście ^^

Odnośnie pytania po co to:
new a=1
while(10>a++)
{
      client_print(id,print_chat,"%d",a)
}

Najpierw sprawdza czy 10 jest większe od a, a następnie zwiększa a o 1 i przy sprawdzaniu a=9 jednak już przy princie a=10.

Jeżeli jednak zrobimy to tak:
new a=1
while(10>++a)
{
      client_print(id,print_chat,"%d",a)
}
To już przed sprawdzeniem zwiększy a o 1 (więc należy uważać na fakt, że przed pierwszym sprawdzeniem a ma już wartość 2 a nie 1) i wartość a przy sprawdzeniu będzie taka sama jaka przy printowaniu.
Odpowiedz

  • +
  • -
darkman - zdjęcie darkman 18.01.2009

fachowo powiększanie o 1 nazywa się inkrementacją, a zmniejszanie dekrementacją.

działa to tak samo jak

zmienna += 1
zmienna = zmienna + 1
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 18.01.2009

w zależności od kolejności zwracanie-zmiana dodaje się prefiksy: "pre" i "post"

np.
++zmienna preinkrementacja
Odpowiedz