[c++] int main (int argc, char** argv) - nie rozumiem efektu
Ostatnio zmodyfikowano 2013-11-27 18:24
niziol Temat założony przez niniejszego użytkownika |
[c++] int main (int argc, char** argv) - nie rozumiem efektu » 2013-11-27 00:26:03 #include <iostream> int main( int argc, char ** argv ) { int x = 0; int y = 0; if( x++ && y++ ) { y += 2; } std::cout << x + y << std::endl; return 0; } To jest kod programu, ktoś rozjaśni co się w nim dzieje i dlaczego kompilator wypluwa 1? |
|
docentpp |
» 2013-11-27 01:14:21 Takie są szczególiki post- i preinkrementacji. Różnice widać w tym kodzie : int x = 0; int y = 0;
cout << "(x++ && y++)= " <<( x++ && y++ ) << endl; cout << "x=" << x << " y=" << y << endl;
cout << "*******************************" << endl;
int z = 0; int v = 0;
cout << "(++v && ++z)= " <<( ++v && ++z ) << endl; cout << "v=" << v << " z=" << z << endl;
w postinkrementacji najpierw jest pobierana i wykorzystywana wartość zmiennej do wyrażenia arytmetycznego(logicznego), a po jej wykorzystaniu jest ta wartość zwiększana. W preinkrementacji wartość zmiennej jest zwiększana przed wykorzystaniem danej zmiennej do obliczeń. Dodatkowo, w pierwszym warunku, ponieważ x=0 , to druga część warunku nie jest obliczana, bo niezależnie od wartości y wyrażenie wynosi zero, czyli y pozostaje "nietknięte" |
|
niziol Temat założony przez niniejszego użytkownika |
» 2013-11-27 09:40:36 No dobra, to muszę doczytać o post- i preinkrementacji jak widzę i poćwiczyć to jeszcze, a dlaczego y+=2 nie powoduje zmiany y na 2? Mógłbyś jeszcze coś napisać o tym warunku? Bo wg mnie dziwnie on wygląda, czemu y w warunku zostaje nietknięte? |
|
docentpp |
» 2013-11-27 10:23:01 Wartość logiczna tego wyrażenia wynosi zero, więc nie jest wykonywana instrukcja w klamrze. int x = 0; int y = 0;
if( x++ && y++ ) { y += 2; }
Dlaczego tak jest,wyjaśniłem w poprzednim wpisie. Wklej mój poprzedni kod do swego programu i testuj. Potem testuj na rózne sposoby,np: (++x && y++); (x++ && ++y) itp, potem dla trzech zmiennych: (x++&&y++&&++v) , (x++&&++y&&++v) , (x++&&y++&&v++) , itd. , aż "wyczujesz" wszystkie niuanse zapisu x++ , ++x. |
|
niziol Temat założony przez niniejszego użytkownika |
» 2013-11-27 18:24:25 okej, dziękuję Ci bardzo, poogarniam to sobie :)
|
|
« 1 » |