Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] int main (int argc, char** argv) - nie rozumiem efektu

Ostatnio zmodyfikowano 2013-11-27 18:24
Autor Wiadomość
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
C/C++
#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?
P-97631
docentpp
» 2013-11-27 01:14:21

Takie są szczególiki post- i preinkrementacji.

Różnice widać w tym kodzie :
C/C++
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"
P-97632
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?
P-97638
docentpp
» 2013-11-27 10:23:01
Wartość logiczna tego wyrażenia wynosi zero,
więc nie jest wykonywana
instrukcja w klamrze.
C/C++
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.
P-97640
niziol
Temat założony przez niniejszego użytkownika
» 2013-11-27 18:24:25
okej, dziękuję Ci bardzo, poogarniam to sobie :)
P-97686
« 1 »
  Strona 1 z 1