На этом шаге мы рассмотрим особенности использования этого оператора.
С оператором присваивания = мы уже знакомы: он используется для присваивания значений переменным. Обычно используются команды вида переменная=значение. Напомним, что в результате выполнения такой команды переменная, указанная слева от оператора присваивания =, получает значение, указанное справа от оператора присваивания. Но особенность оператора присваивания в том, что он возвращает значение. Поэтому у выражения вида переменная=значение есть значение, и такое выражение можно использовать в более сложном выражении. Проще говоря, в одной команде может быть больше одного оператора присваивания.
Самая простая ситуация когда сразу нескольким переменным присваивается значение. Скажем, следующий блок программного кода имеет смысл и является корректным:
int А, В, С;
А=В=С=123;
Здесь три целочисленные переменные А, В и С значением получают число 123. Объяснение простое. Команда А=В=С=123 представляет собой инструкцию, которой переменной А значением присваивается выражение В=С=123. Выражение В=С=123 - это команда, которой переменной В присваивается значением выражение C=123. Командой С=123 переменной С присваивается значение 123. И само это выражение C=123 имеет значение - это значение, присваиваемое переменной С (то есть 123). Следовательно, переменная В получает значение 123, и значением выражения В=С=123 также является число 123. Это значение присваивается переменной А. В итоге все три переменные (А, B и С) получают значение 123.
Команда с несколькими операторами присваивания может быть более замысловатой. Как пример рассмотрим следующий блок программного кода:
int А, В, С;
А=(А=(А=3) + (В=5)-(С=7-В)) + (А=А+(В=В+2) * (C=С-3));
После выполнения этого кода у переменной А будет значение 5, у переменной В будет значение 7, а переменная С получит значение -1. Чтобы понять, почему так происходит, проанализируем команду А=(А=(А=3)+(В=5)-(С=7-В))+(А=А+(В=В+2)*(С=С-3)). В этой команде значением переменной А присваивается выражение (А=(А=3) + (В=5)-(С=7-В)) + (А=А+(В=В+2)*(С=С-3)). Данное выражение представляет собой сумму двух операндов: (А= (А=3) + (В=5) - (С=7-В)) и (А=А + (В=В+2) * (С=С-3)). Операнды вычисляются слева направо. Первым вычисляется операнд (А= (А=3) + (В=5) - (С=7-В)). После него вычисляется операнд (А=А + (В=В+2) * (С=С-3)).
Операнд (А=(А=3) + (В=5) - (С=7-В)) представляет собой выражение, в котором переменной А значением присваивается выражение (А=3) + (В=5) - (С=7-В). В нем три операнда: А=3, В=5 и С=7-B. Они вычисляются последовательно слева направо. В результате сначала переменная А получает значение 3 (и это же значение выражения А=3), переменная В получает значение 5 (значение выражения В=5), а переменная С получает значение 2 (оно же - значение выражения С=7-B). Тогда результат выражения (А=3) + (В=5) - (С=7-В) равен 6 (3 плюс 5 минус 2). А поскольку это выражение присваивается значением переменной А (операнд (А=(А=3) + (В=5) - (С=7-В))), то значение переменной А становится равным 6.
При вычислении значения второго операнда (А=А + (В=B+2) * (С=С-3)) значением переменной А присваивается сумма двух выражений: А и (В=В+2) * (С=С-3). Как мы выяснили выше, текущее значение переменной А равно 6. При вычислении выражения В=В+2 (учитывая, что текущее значение переменной В равно 5) получается, что значение переменной В равно 7 и это же будет значение выражения В=В+2. Для выражения С=С-3 получаем значение -1 (оно же значение переменной С): в данном случае нужно учесть, что на предыдущем этапе переменная С получила значение 2. В итоге значение выражения (В=В+2) * (С=С-3) равно -7. Тогда второй операнд (А=А+ (В=В+2) * (С=С-3)) равен -1 (6 плюс -7). Следовательно, значение выражения (А=(А=3) + (В=5) - (С=7-В) ) + (А=А+ (В=В+2) * (С=С-3)) равно 5 (6 плюс -1). Это новое значение переменной А. Таким образом, переменная А получила значение 5, переменная В получила значение 7, а переменная С получила значение -1.
На следующем шаге мы рассмотрим сокращенные формы операции присваивания.