Помощ - Търси - Регистрирани - Календар
Пълна версия: Суфикс в "С".
UniBG Forums > Дискусии > Dexter's Lab > Програмиране
zxccccccccccc
Имам един въпрос:
CODE
int i=1;
                              int j=2;
                              int k=3;
                              int ans;
                              ans = i++*j - k--;

При суфиксния оператор първо се изполва в израза, а след това се инкрементиране/декрементиране със суфиксения оператор.Въпроса ми е кога ще се инкрементира 'i' и 'k'.
Guest
Благодаря предварително.
Narf
k няма да се инкрементира, а ще се декрементира(блах, кой ви кара да ползвате тия думи wink.gif ).
i ще се увеличи с 1, а k ще се намали с 1 веднага след изпълнението на:

CODE
ans = i++*j - k--;


Т.е. Първо реда ще се изпълни с вече зададените стойности, а после ще се променят. Правилото с тези оператори е просто - когато са пред променливата, първо я променят, а после изпълняват. Логично и обратното - когато са след нея, първо се изпълнява, а после се променя.

P.S.: Не разбирам от C, това си е просто основно правило в програмирането.
Guest
Добре, но всъщност "С" вижда това - [CODE]ans =1*2-3
което всъщност е -1, въпроса ми е кога ще се променят "i" и "k"?Ако ги използвам по - напред в програмат или въобще няма да се променят?
Narf
След този ред вече ще са променени.
theBlackened
Ще се променят след този ред, където получаваш ans. След него те вече са с новите си стойности: i = 2, k = 2, независимо дали ги ползваш по-нататък в програмата.
Guest
@theBlackened, ако използвам 'i' и 'k' например в още едно уравнение те вече ще със променентие стойности така ли?
ПП: Благодаря за отговорите ви?
theBlackened
Да, точно така.
NoEx
Нарочно съм променил примера ти. Разгледай кода по-долу. Обърни внимание на удебеленият текст.

QUOTE
main()
{
       int i = 1, j = 2, k = 3, ans;
       printf("i = %d; j = %d; k = %d;\n", ++i, j, k--);
       ans = i * j - k;
       printf("Result: %d\n", ans);
       return 0;
}


Получава се:

QUOTE
noex@free:~/tests$ ./ex.o
i = 2; j = 2; k = 3;
Result: 2


Narf също го е обяснил добре.

Ако имаш i++, то i ще се увеличи с 1 веднага след изпълнението, ако пък е ++i, то ще се увеличи и след това ще се изпълни каквото трябва (в случая да изпише стойноста му).
Това е семпла версия на форума. За да видиш пълната версия, която има повече информация, по-добра подредба и снимки, натисни тук.
Invision Power Board © 2001-2008 Invision Power Services, Inc.