#include<stdio.h>
int main(void) {
int a=(1, 2), 3;
printf("%d", a);
return 0;
}
вывод: 2
Может ли кто-нибудь объяснить, как вывод 2?
#include<stdio.h>
int main(void) {
int a=(1, 2), 3;
printf("%d", a);
return 0;
}
вывод: 2
Может ли кто-нибудь объяснить, как вывод 2?
Может ли кто-нибудь объяснить, как вывод 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
.
Может ли кто-нибудь объяснить, как вывод 2?
Поскольку приоритет оператора присваивания (=
) выше, чем оператор запятой (,
).
Следовательно, утверждение:
a = (1, 2), 3;
эквивалентно:
(a = (1, 2)), 3;
и выражение (1, 2)
оценивается как 2
.
результат:
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), поскольку это два отдельных оператора.
Надеюсь, это ответит на ваш вопрос.