programowanie c, post i preinkrementacja

Awatar użytkownika
wiedzma
Użytkownik
Użytkownik
Posty: 167
Rejestracja: 29 gru 2007, o 12:33
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 93 razy

programowanie c, post i preinkrementacja

Post autor: wiedzma »

Mam tablice: tab[4];
{char tab[]={'a',3,2,5}, i=2,h=0}
i teraz dwa przyklady:
1. h=tab[++i];
2. h=tab[i++]

Dlaczego w obu przypadkach wartosc h bedzie taka sama? Ogolnie wiedzac na czym polega roznica miedzy post i preinkrementacja spodziewalam sie raczej innych wynikow. Dlaczego w tym wypadku tak jest?
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

programowanie c, post i preinkrementacja

Post autor: spajder »

Jeśli to są instrukcje wykonywane jedna po drugiej to będzie taka sama, jeśli wykonana jest jedna z nich, wartość będzie różna. Różnica jest prosta:
++x zwiększa wartość x i zwraca zwiększoną już wartość:

Kod: Zaznacz cały

x = 3;      // x = 3
y = ++x;  // y = 4, x = 4
Natomiast x++ zwiększa wartość, ale zwraca starą:

Kod: Zaznacz cały

x = 3;        // x = 3
y = x++;    // y = 3, x = 4
peterp
Użytkownik
Użytkownik
Posty: 30
Rejestracja: 27 sie 2008, o 13:29
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 3 razy
Pomógł: 5 razy

programowanie c, post i preinkrementacja

Post autor: peterp »

wiedzma pisze:Dlaczego w obu przypadkach wartosc h bedzie taka sama? Ogolnie wiedzac na czym polega roznica miedzy post i preinkrementacja spodziewalam sie raczej innych wynikow. Dlaczego w tym wypadku tak jest?
Z całą pewnością wartość zmiennej h nie będzie taka sama. W pierwszym wypadku h = tab[i+1], a w drugim h = tab. Wynika to z faktu, że wartością wyrażenia n++ jest n, a wartością wyrażenia ++n jest n+1. To jest właśnie różnica między pre- a postinkrementacją.
Jeszcze bardziej "łopatologicznie":

Kod: Zaznacz cały

a=i++ to inaczej a=i; i=i+1;
a=++i to inaczej a=i+1; i=i+1;
Awatar użytkownika
wiedzma
Użytkownik
Użytkownik
Posty: 167
Rejestracja: 29 gru 2007, o 12:33
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 93 razy

programowanie c, post i preinkrementacja

Post autor: wiedzma »

Coz, dziekuje za wyjasnienie roznicy miedzy post i preinkrementacja, problem tkwi w tym, ze ja rozumiem roznice pomiedzy nimi, natomiast moja watpliwosc wynika z tego, ze znajomy informatyk powiedzial mi, ze w przypadku takiej instrukcji:

h=tab[++i];

i takiej:

h=tab[i++];

wartosc zmiennej h bedzie taka sama, poniewaz wartosci wyrazen zarowno i++ jak ++i zostana wyliczone przed podstawieniem ich w miejsce indeksu elementu tablicy (w zwiazku z czym w pierwszym i drugim przypadku otrzymamy h=tab[i+1]), ponoc ma to zwiazek z roznica priorytetow (!?), niestety nie do konca to zrozumialam.
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

programowanie c, post i preinkrementacja

Post autor: spajder »

Niestety nie. Ale jeśli wykonasz te dwie instrukcje pod rząd:

Kod: Zaznacz cały

h=tab[++i];  // najpierw zwiększa i, więc odwołuje się do h[3];
h=tab[i++];  // odwołuje się do h[3], potem zwiększa i do 4
czyli to samo
Awatar użytkownika
wiedzma
Użytkownik
Użytkownik
Posty: 167
Rejestracja: 29 gru 2007, o 12:33
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 93 razy

programowanie c, post i preinkrementacja

Post autor: wiedzma »

Bardzo wam dziekuje, faktycznie mieliscie racje, wklepalam wszystko do kompilatora, sprawdzilam i jest tak jak mowicie.
ODPOWIEDZ