Присвоение двух значений в скобках в C - PullRequest
4 голосов
/ 15 сентября 2009

Что делает этот фрагмент кода в C:

p = (1, 2.1);

Что мы знаем о p?

Ответы [ 3 ]

18 голосов
/ 15 сентября 2009

Оператор запятой в C представляет собой точку последовательности , что означает, что выражения, разделенные запятой, выполняются слева направо. Значение всего выражения - это значение самого правого выражения, в вашем случае 2.1, которое присваивается переменной p.

Поскольку выражения в вашем примере не имеют побочных эффектов, использование разделителя запятых здесь не имеет никакого смысла.

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

1 голос
/ 15 сентября 2009

Это ошибка. оператор запятой похож на;. Это делает одно, потом другое. поэтому (1,2.1) оценивается в 2,1

p будет 2,1 (или 2, если p является целым числом и его нужно усечь ...)

0 голосов
/ 15 сентября 2009

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

так р будет 2,1.

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