Об использовании скобок в C - PullRequest
1 голос
/ 15 ноября 2010
void main()
int a,b,c;
c=(a,b)

Это дает c=b, в то время как

c=a,b 

дает c=a.

В чем причина этих двух выше?

Ответы [ 2 ]

11 голосов
/ 15 ноября 2010

В этой строке:

c=(a,b)

Скобки означают: «сначала оцените выражение a,b, а затем присвойте значение c». В этом случае присваивается b, потому что это выражение с правой стороны a,b. В C выражения запятых вычисляются слева направо, а общее значение соответствует значению самого правого выражения.

Пока в этой строке:

c=a,b

Назначение оценивается сначала как вся левая сторона, то есть c=a. Это связано с тем, что оператор равенства = имеет приоритет над оператором запятой ,. Таким образом, b вообще не присваивается c. Это эквивалентно:

(c=a),b
3 голосов
/ 15 ноября 2010

В C оператор запятой вычисляет первый операнд, затем отбрасывает его и затем вычисляет правый операнд.Таким образом, результатом является правильный операнд.И это имеет самый низкий приоритет.

c = (a,b)

() имеет более высокий приоритет, чем, поэтому a, b вычисляется первым.Результат б.Таким образом, c = b.

Но когда используется c = a, назначение b = имеет более высокий приоритет.Таким образом, с = а оценивает первым.Таким образом, а назначается с.

Проверьте это для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...