Подтвердить что ты не робот

Что возвращает задание?

Почему выражение i = 2 возвращает 2? Каково правило, основанное на?

printf("%d\n", i = 2 ); /* prints 2 */

Я нахожусь в домене C после длительного пребывания в Java/С#. Простите мое невежество.

4b9b3361

Ответ 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