Войти

Показать полную графическую версию : Основы C++ | Раскрытие цикла while (s--) { ... };


Skrip
28-07-2005, 13:46
Объясните мне, пожалуйста, как работает условие оператора while в отрывке:

int s = 12;

int* cp = c.v;

int* ap = a.v;

int* bp = b.v;

while (s--) *cp++ = *ap++ + *bp++;

Savant
28-07-2005, 13:54
while (s--)
пока s не равно нулю, уменьшаем его на единицу и выполняем код за ним (*cp++ = *ap++ + *bp++)
равносильно

while (s != 0)
{
s--; // или s = s - 1;
*cp++ = *ap++ + *bp++;
}

pva
10-08-2005, 14:16
Вооще-то вот как
[code]

loop:
s--;
if (s==0) goto exit;
*cp = *ap + *bp;
bp++;
ap++;
cp++;
goto loop;
exit:

[code]

Sharkky
20-08-2005, 20:35
А чтобы было ещё понятнее. К тому, что уже сказано разжую, следующие истины:
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