Ответ 1
Оператор-запятая оценивает i<0
Или i>0
и игнорирует. Следовательно, всегда существует 5
, присутствующее в условии.
Итак, это эквивалентно:
for(i=0;5;i++)
#include<stdio.h>
main()
{
int i;
for(i=0;i<0,5;i++)
printf("%d\n",i);
}
Я не могу понять, i<0,5
часть в состоянии цикла for.
Даже если я сделаю это, i>0,5
, нет никаких изменений в выходе.
Как это работает?
Оператор-запятая оценивает i<0
Или i>0
и игнорирует. Следовательно, всегда существует 5
, присутствующее в условии.
Итак, это эквивалентно:
for(i=0;5;i++)
Оператор запятой всегда будет давать последнее значение в списке, разделенном запятыми.
В основном это двоичный оператор, который оценивает значение левой руки, но отбрасывает его, затем оценивает значение правой руки и возвращает его.
Если вы цепью несколько из них, они в конечном итоге будут давать последнее значение в цепочке.
В соответствии с комментарием anatolyg это полезно, если вы хотите оценить значение левой руки перед правым (если левая оценка имеет желаемый побочный эффект).
Например, i < (x++, x/2)
будет разумным способом использовать этот оператор, потому что вы влияете на значение правой руки с учетом оценки стоимости левой руки.
http://en.wikipedia.org/wiki/Comma_operator
int x = 100;
while(x --> 0) {
// do stuff with x
}
Это просто еще один способ написания x-- > 0
.
i<0,5
всегда будет оцениваться до 5
, как всегда правильное выражение будет возвращено для ex1,ex2
.
Оператор coma выполняется с инициализацией и частью приращения, чтобы сделать что-то вроде for(i=0,j=20;i<j;i++,j--)
, если вы сделаете это в части сравнения, он будет оценивать последний (как уже было сказано ранее)
Оператор запятой предназначен для случаев, когда первый операнд имеет некоторые побочные эффекты. Это просто идиома, предназначенная для того, чтобы сделать ваш код более читаемым. Это не влияет на оценку условного.
Например,
for (i = 0; i<(i++, 5); i++) {
// something
}
будет увеличивать i
, а затем проверить, если i<5
.