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?
programowanie c, post i preinkrementacja
-
- 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
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ść:
Natomiast x++ zwiększa wartość, ale zwraca starą:
++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
Kod: Zaznacz cały
x = 3; // x = 3
y = x++; // y = 3, x = 4
-
- 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
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ą.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?
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;
- wiedzma
- 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
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.
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.
-
- 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
Niestety nie. Ale jeśli wykonasz te dwie instrukcje pod rząd:
czyli to samo
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
- wiedzma
- 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
Bardzo wam dziekuje, faktycznie mieliscie racje, wklepalam wszystko do kompilatora, sprawdzilam i jest tak jak mowicie.