Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Основы C++ | Раскрытие цикла while (s--) { ... }; (http://forum.oszone.net/showthread.php?t=52114)

Skrip 28-07-2005 13:46 344137

Основы C++ | Раскрытие цикла while (s--) { ... };
 
Объясните мне, пожалуйста, как работает условие оператора 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 344141

Цитата:

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

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


pva 10-08-2005 14:16 347205

Вооще-то вот как
[code]

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

[code]

Sharkky 20-08-2005 20:35 349529

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


Время: 11:36.

Время: 11:36.
© OSzone.net 2001-