Из Википедии:
В языках программирования C и C ++ оператор запятой (представленный токеном) является двоичным оператором, который оценивает свой первый операнд и отбрасывает результат, а затем оценивает второй операнди возвращает это значение (и тип).Оператор запятой имеет самый низкий приоритет по сравнению с любым оператором Си и действует как точка последовательности.
Использование токена запятой в качестве оператора отличается от его использования в вызовах и определениях функций, объявлениях переменных, объявлениях перечисленийи аналогичные конструкции, где он действует как разделитель.
В этом примере различное поведение между второй и третьей строками обусловлено тем, что оператор запятой имеет более низкий приоритет, чем присваивание.
int a=1, b=2, c=3, i; // comma acts as separator in this line, not as an operator
i = (a, b); // stores b into i ... a=1, b=2, c=3, i=2
i = a, b; // stores a into i. Equivalent to (i = a), b; ... a=1, b=2, c=3, i=1
i = (a += 2, a + b); // increases a by 2, then stores a+b = 3+2 into i ... a=3, b=2, c=3, i=5
i = a += 2, a + b; // increases a by 2, then stores a = 5 into i ... a=5, b=2, c=3, i=5
i = a, b, c; // stores a into i ... a=5, b=2, c=3, i=5
i = (a, b, c); // stores c into i ... a=5, b=2, c=3, i=3
Ссылка: http://en.wikipedia.org/wiki/Comma_operator