[C][C++] Inkrementacja i jej zachowanie

reyg
Użytkownik
Użytkownik
Posty: 46
Rejestracja: 29 wrz 2015, o 14:40
Płeć: Mężczyzna
Lokalizacja: San Escobar
Podziękował: 18 razy

[C][C++] Inkrementacja i jej zachowanie

Post autor: reyg »

Mam problem ze zrozumienie, dlaczego kompilator w przypadkach poniżej wypisuje takie wyniki.
Nie widzę za bardzo co dzieje się po kolei. mógłby mi ktoś to wytłumaczyć. Tak jakoś łopatologicznie?

Kod: Zaznacz cały

int a=5; 
int b=a++*a++; 
cout<<b<<" "<<a;
return 0;
Wypisuje: 30 i 7.

Kod: Zaznacz cały

int a=5; 
int b=++a*++a;
cout<<b<<" "<<a;
return 0;
Tu wypisuje 49 i 7.

Kod: Zaznacz cały

int a=5;
int b=a++*++a; 
cout<<b<<" "<<a;
return 0;
Tutaj 35 i 7.

Kod: Zaznacz cały

int a=5; 
int b=++a*a++; 
cout<<b<<" "<<a;
return 0;
Tutaj 42 i 7.

Wiem że a++ i ++a, to różne rzeczy, ale nie widzę tego w praktyce w powyższych kodach.
Np. a=5 i b=a++ to b=5 (i następnie a=6).
W przypadku a=5 i b=++a to od razu b=6 i a=6, tak?
Ostatnio zmieniony 29 sty 2018, o 03:33 przez Afish, łącznie zmieniany 2 razy.
Powód: Zły sosób prezentacji kodu programu. Wielkie litery.
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

[C][C++] Inkrementacja i jej zachowanie

Post autor: miki999 »

No to od początku:

Kod: Zaznacz cały

int a=5;
int b=a++*a++;
Wartość a na początku to \(\displaystyle{ 5}\) . a++ mówi "weź wartość a i zwiększ ją o \(\displaystyle{ 1}\)", zatem mamy:

Kod: Zaznacz cały

b = 5 * a++;  // a = 6 
Potem zwróć uwagę na kolejność operatorów ( ... precedence) ++ jest przed *, więc znowu bierzemy wartość a , która po poprzedniej operacji wynosi \(\displaystyle{ 6}\) i ją inkrementujemy. Czyli mamy:

Kod: Zaznacz cały

b = 5 * 6  // a = 7
Pozostałe przykłady analogicznie, tyle że jak ++ jest z przodu, to najpierw inkrementujesz, a potem bierzesz.

Oczywiście taki kod jest bardzo nieczytelny.
reyg
Użytkownik
Użytkownik
Posty: 46
Rejestracja: 29 wrz 2015, o 14:40
Płeć: Mężczyzna
Lokalizacja: San Escobar
Podziękował: 18 razy

[C][C++] Inkrementacja i jej zachowanie

Post autor: reyg »

Dzięki. W miarę mi się to jakoś poukładało.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

Re: [C][C++] Inkrementacja i jej zachowanie

Post autor: Afish »

W C++ taka operacja powoduje niezdefiniowane zachowanie, więc jakiekolwiek analizy są umiarkowanie wiarygodne.
ODPOWIEDZ