Почему выражение i = 2 возвращает 2? Каково правило, основанное на?
printf("%d\n", i = 2 ); /* prints 2 */
Я нахожусь в домене C после длительного пребывания в Java/С#. Простите мое невежество.
Ответ 1
Он оценивает до 2, потому что это определяет стандарт. Из C11 Standard, раздел 6.5.16:
Выражение присваивания имеет значение левого операнда после присваивания
Чтобы разрешить такие вещи:
a = b = c;
(хотя есть некоторые дебаты относительно того, является ли такой код хорошим или нет.)
Кстати, это поведение реплицируется в Java (и я бы поспорил, что он тоже на С# тоже).
Ответ 2
Правило состоит в том, чтобы вернуть правый операнд =, преобразованный в тип переменной, которой присвоен.
int a;
float b;
a = b = 4.5; // 4.5 is a double, it gets converted to float and stored into b
// this returns a float which is converted to an int and stored in a
// the whole expression returns an int
Ответ 3
Назначьте значение 2 в i
Оцените переменную я и покажите ее
Ответ 4
В C (почти) все выражения имеют 2 вещи
1) значение
2) побочный эффект
Значение выражения
2
- 2; его побочный эффект "нет";
Значение выражения
i = 2
- 2; его побочным эффектом является "изменение значения в объекте с именем i до 2";
Ответ 5
Сначала рассмотрим выражение, затем напечатаем самую левую переменную.
Пример:
int x,y=10,z=5;
printf("%d\n", x=y+z ); // firstly it calculates value of (y+z) secondly puts it in x thirdly prints x
Примечание:
x++ является постфиксным, а ++x является префиксом, поэтому:
int x=4 , y=8 ;
printf("%d\n", x++ ); // prints 4
printf("%d\n", x ); // prints 5
printf("%d\n", ++y ); // prints 9