Задачи по языку С



         

Пояснения: - часть 2


/p>

Операции 3.3

(z=0) 0

вначале x=1, y=1 z = x ++ - 1
z = (x++) - 1 z = ((x++)-1) (z=((x++)-1)) Вследствие приоритетов операций.
(z=(1-1)) и x=2 Операция ++, стоящая справа от операнда, представляет собой постфиксную операцию. Это означает, что x увеличится на 1 после того, как значение x будет использовано в выражении.

Операции 3.4

вначале x=2, y=1, z=0 z += - x ++ + ++ y
z += - (x++) + (++y) Унарные операции выполняются справа налево, так что операция ++ выполнится перед операцией -. (Фактически, если бы операция изменения знака выполнялась первой, выражение было бы некорректным, так как операции ++ и - требуют, чтобы операндом было адресное значение; x есть адресное значение, а -x нет.)
z += (-(x++)) + (++y) z += ((-(x++))+(++y)) (z+=((-(x++))+(++y)))
(z+=((-2)+2)) и x=3, y=2 (z+=0) (z=0+0) (z=0) 0 Вычисление выражения начинается "изнутри".

Операции 3.5

вначале x=2, y=1, z=0 z = x / ++ x z = x / (++x) z = (x/(++x)) z = (x/(++x)) (z=(x/(++x)))

Вы могли бы поддаться искушению вычислять это выражение, как и раньше, изнутри. Вначале было бы выбрано значение x, увеличено на 1, а потом уже пойдет деление на значение x. Но возникает вопрос: какое значение x нужно использовать в качестве делимого - старое (3) или новое (4)? Иными словами, что делается раньше - выбирается ли значение x, используемое в дальнейшем в качестве делимого, или в x записывается его значение, увеличенное на 1. Описание языка не определяет, что получается, если возникают такие побочные эффекты1; их реализация остается за разработчиками трансляторов. Отсюда совет - избегайте выражений, вычисление которых зависит от вашего знания того, что происходит при побочных эффектах.

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

Примечание редактора электронного издания.

Интересный пример подобной ошибки может возникнуть при выполнении 8.2.




Содержание  Назад  Вперед