Оператор запятой в c

222
25

#include<stdio.h> 
int main(void) {
int a=(1, 2), 3;
printf("%d", a);
return 0;
}

вывод: 2

Может ли кто-нибудь объяснить, как вывод 2?

спросил(а) 2017-09-12T16:06:00+03:00 2 года, 6 месяцев назад
1
Решение
196

Может ли кто-нибудь объяснить, как вывод 2?



В заявлении


a = (1, 2), 3;   

, используется оператор запятой.
Из-за более высокого приоритета оператора =, чем оператора ,, операнд выражения (1, 2) будет привязан к = как

(a = (1, 2)), 3;  

В случае оператора запятой левый операнд оператора запятой вычисляется на выражение void, тогда правый операнд оценивается, а результат имеет значение и тип правильного операнда.


Здесь есть два оператора запятой. Для первого оператора запятой в выражении (1, 2), 1 будет вычисляться на void выражение, а затем 2 будет оценен и будет назначен a.

Теперь был выполнен побочный эффект a, и поэтому будет оценен правый операнд второго оператора запятой 3, а значение выражения (a = (1, 2)), 3 будет 3.

ответил(а) 2017-09-12T18:33:00+03:00 2 года, 6 месяцев назад
279

Может ли кто-нибудь объяснить, как вывод 2?



Поскольку приоритет оператора присваивания (=) выше, чем оператор запятой (,).


Следовательно, утверждение:


a = (1, 2), 3;

эквивалентно:


(a = (1, 2)), 3;


и выражение (1, 2) оценивается как 2.

ответил(а) 2017-09-12T16:09:00+03:00 2 года, 6 месяцев назад
52

результат:


a = x, y     =>     x

a = (i, j) => j


поэтому, если мы имеем:


x = (1 , 2)

a = (1 , 2) , 3 => 2


Как сказано здесь:


Оператор запятой разделяет выражения (которые имеют значение) таким образом аналогично тому, как точки с запятой завершают утверждения, и последовательности выражения заключены в круглые скобки аналогично тому, как последовательности операторов заключены в фигурные скобки: (a, b, c) - последовательность выражения, разделенные запятыми, которые оцениваются до последнего выражение c в то время как {a; б; c;} - последовательность операторов, и не оценивать какое-либо значение. Запятая может встречаться только между двумя выражения - запятые отдельные выражения - в отличие от точки с запятой, который встречается в конце (неблокированного) оператора - точки с запятой завершать утверждения.

Оператор запятой имеет наименьший приоритет любого оператора С и действует как точка последовательности. В комбинации запятых и точек с запятой, точки с запятой имеют более низкий приоритет, чем запятые, так как точки с запятой разделяются заявления, но запятые происходят в рамках утверждений, которые соответствуют их использование в качестве обычной пунктуации: a, b; c, d сгруппированы как (a, b); (c, d), поскольку это два отдельных оператора.



Надеюсь, это ответит на ваш вопрос.

ответил(а) 2017-09-12T18:41:00+03:00 2 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема