Показать полную графическую версию : Основы C++ | Раскрытие цикла while (s--) { ... };
Объясните мне, пожалуйста, как работает условие оператора while в отрывке:
int s = 12;
int* cp = c.v;
int* ap = a.v;
int* bp = b.v;
while (s--) *cp++ = *ap++ + *bp++;
while (s--)
пока s не равно нулю, уменьшаем его на единицу и выполняем код за ним (*cp++ = *ap++ + *bp++)
равносильно
while (s != 0)
{
s--; // или s = s - 1;
*cp++ = *ap++ + *bp++;
}
Вооще-то вот как
[code]
loop:
s--;
if (s==0) goto exit;
*cp = *ap + *bp;
bp++;
ap++;
cp++;
goto loop;
exit:
[code]
А чтобы было ещё понятнее. К тому, что уже сказано разжую, следующие истины:
1. Любое выражение типа while(s) if(s) означает while(s!=0) if(s!=0)
2. s-- (равно как s++) означает сначала взять (присвоить, сравнить и.т.д) значение s, а потом отнять (добавить) 1.
То есть
int s = 1;
int i = s-- даст i=1, a int i = --s даст i = 0
Соответственно, если бы в твоём примере было
while(--s) ... Это бы означало
while (s - 1 !=0 ) s = s -1 ...
Меня в своё время очень забавляло написание while(s-->0). Пока s стремиться к нулю ... :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.