Информатика и технология программирования

         

Операции присваивания


К операциям присваивания относятся все операции, которые меняют значение одного из операндов. В Си их целых три группы:



-обычное присваивание (=);



-присваивание, соединенное с одной их бинарных операций (+=, -=, *=, /=, %=, &#60=, &#62=, &#38=, |=, ^=);



-операции инкремента и декремента (увеличения и уменьшения на 1).

Операция присваивания "=" сохраняет значение выражения, стоящего в левой части, в переменной, а точнее, в адресном выражении, стоящем а правой части. Термин "АДРЕСНОЕ ВЫРАЖЕНИЕ" (или l-value ) используется для обозначения тех выражений, которым соответствуют объекты (переменные) в памяти программы. На данном уровне знакомства со структурами данных -это простые переменные и элементы массивов.

При выполнении операции присваивания тип выражения в правой части преобразуется к типу адресного выражения в левой. Результатом операции является значение левой части после присваивания, соответственно, тип результата -это тип левой части. Кроме того, присваивание -одна из немногих операций с направлением выполнения "справа налево". Из сказанного следует возможность многократного присваивания "справа налево", в котором результат каждого из них используется как правая часть последующего:


long a; char b; int c;
a = b = c; // эквивалентно b = c; a = b;

В данном случае при первом (правом) присваивании тип int преобразуется к char, а результатом операции является значение переменной b типа char после выполнения этого присваивания.

Операция присваивания, соединенная с одной из бинарных операций, -это частный случай, когда результат бинарной операции сохраняется (присваивается) в первом операнде:


a +=b; // эквивалентно a = a + b;

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


A[i++] +=b; // эквивалентно A[i] = A[i] + b; i++;

Операции инкремента и декремента увеличивают или уменьшают значение единственного операнда до или после использования его значения в выражении:

.


int a; // Эквивалент Интерпретация




a++; // Rez=a; a=a+1; Увеличить на 1 после использования


++a; // a=a+1; Rez=a; Увеличить на 1 до использования


a--; // Rez=a; a=a-1; Уменьшить на 1 после использования


--a; // a=a-1; Rez=a; Уменьшить на 1 до использования



Содержание раздела