Операторы присваивания служат для вычисления значений выражений и присваивания вычисленных значений переменным.
Оператор присваивания имеет вид:
где x – имя переменной,
s – выражение того же типа,
= - знак присваивания.
Оператор присваивания дает команду компьютеру на вычисление значения выражения справа от знака присваивания и запись вычисленного значения в ячейку памяти, отведенную для хранения переменной, стоящей слева от знака присваивания. При этом прежнее значение переменной аннулируется. Поэтому в программировании можно использовать, например, такие операторы присваивания:
y = y + 5;
Выполняя его, компьютер возьмет старое значение переменной y и увеличит его на 5, после чего полученное новое значение этой переменной снова запишет в отведенную для нее ячейку памяти.
Начинающий программист может сделать ошибку, записав слева от знака присваивания не имя переменной, а константу или выражение:
a + b = y + 5.2;
В отличие от Паскаля, присваивание в Си может быть организовано несколькими способами:
как оператор присваивания:
a = 5;
как оператор-выражение:
a++;
как операция, встречающаяся в выражении несколько раз, при этом операции присваивания выполняются справа налево:
a = b = c = 5;
как операция, если стоит внутри других операций:
a = (b = 1) + 4;
Сначала переменной b будет присвоено значение 1, а затем к результату, полученному в скобках, будет прибавлено 4..
a = (b = 1, c = 2) + 4;
В этом случае сначала выполняются обе операции присваивания в скобках (перечисляются через запятые). Результат операций в скобках равен результату последней операции в них, то есть 2. После этого выполняются остальные операции в выражении, в данном случае операция сложения. Таким образом, одним оператором присваивания будут присвоены значения сразу трем переменным:
b = 1, c = 2, a = 6
Операции присваивания, изменяющие старые значения переменных, реализуются в Сиобъединенными арифметическими или побитовыми операциями присваивания:
a = a + 5; a+=5;
a = a – 3; a-=3;
a = a * 4; a*=4;
a = a / 6; a/=6;
a = a % 2; a%=2;
a = a + b / c; a+=b/c;
a = a & 3; a&=3;
a = a | 2; a|=2;
a = a * b / c; a*=b/c;
a = a * (b + c); a*=b + c;
Эти операции, как и сама операция присваивания, имеют самый низкий приоритет и выполняются в выражениях последними справа налево, поэтому, например, замена
a = a / b *c; на a/=b * c;
будет неверна – получаются различные выражения.
В операторах присваивания могут использоваться операции инкремента++и декремента--. Знаки инкремента и декремента могут стоять в выражениях как перед переменной (префиксная запись), так и после нее (постфиксная запись). При этом выражения будут вычисляться по-разному:
при префиксной записи (знак перед переменной) сначала изменяется значение этой переменной, а затем выполняются другие операции, и последней – операция присваивания:
a = 4;
b = ++a; a=5, b=5
c = ++b/2; b=6, c=3
d = ++a/2; a=6, d=3
при постфиксной записи (знак после переменной) сначала вычисляется значение выражения со старыми значениями переменных, выполняется операция присваивания, после чего выполняются операции инкремента или декремента:
a = 4;
b = a++; b=4, a=5
c = b++/2; c=2, b=5
d = a++/2; d=2, a=6
В Си приветствуется присваивание начальных значений переменным при их описании – инициализация переменных:
int i=5;
float x=3.1415;
char c=’A’;
Инициализировать переменные можно и выражениями, операндами которых являются константы:
int k=117*16;
float x= 3.1415*2.0e-3;
Если значения переменных целого или вещественного типов явно не заданы при их описании, то они автоматически инициализируются нулями.