Особенности операции присваивания
1) В простейшем и часто используемом случае она похожа на присваивание языка Pascal. Только вместо двух символов (:=) используется один символ “=” и в общем виде выглядит следующим образом:
переменная=выражение;
В этом случае присваивание можно считать самостоятельным оператором. Слева всегда записывается только переменная, поэтому ни обращение к функции, ни константу записать нельзя. Справа как частный случай выражения допускается одна константа (x=0) или только обращение к функции (y=abs(x)).
2) Можно использовать так называемое многочисленное присваивание, когда значение одного и того же выражения присваивается нескольким переменным следующим образом:
Переменная1=Переменная2=…=ПеременнаяN=Выражение;
Например, оператор R=r=v=x+y; трём переменным присваивает одно и то же значение суммы двух чисел. Напомним, что R и r — это разные переменные.
3) Для более компактной записи присваивания разрешается использовать сокращённые операторы.
Например, MySum=MySum+Number1; можно кратко записать так: MySum += Number1; Такого вида сокращения можно использовать для арифметических и битовых бинарных операций (см. в 3.2 группу 14). В общем виде
переменная = переменная операция выражение;
где слева и справа от знака = одна и та же переменная, можно записать компактнее:
переменная операция= выражение;
Здесь идентификатор переменной записывается один раз, между операцией и символом “=” не должно быть пробела. В чём преимущество такой записи? Не надо дважды повторять имя одной и той же переменной.
Такая запись предпочтительнее, если используется длинный идентификатор для переменной. Поэтому в сокращённом операторе Y*=a+b особого смысла нет, можно для начинающих использовать обычную, более понятную форму: Y=Y*(a+b);
4) Для увеличения или уменьшения на единицу можно использовать операции инкремент (++) и декремент( - -). Эти операции могут стоять как перед операндом (префиксная), так и после него (постфиксная). Их можно использовать как самостоятельно, так и в выражении.
При самостоятельном использовании префиксная и постфиксная операции выполняются одинаково, то есть не важно, где стоит знак операции. Например, ++k; и k++; работают одинаково, и это равносильно более простой и понятной записи k=k+1; как принято в других языках. C помощью сокращённого присваивания это же можно записать и так: k+=1; Аналогично, - - number; и number - -; равносильны number=number-1; или number-=1.
В выражениях префиксная и постфиксная операции различаются.
В случае префиксной операции сначала изменяется значение переменной, перед которой стоит операция, а затем используется новое изменённое значение. Например,
int X=2, Y=5, Result; Result= X*(++Y); или с учётом приоритета Result=X*++Y; выполняется следующим образом: сначала увеличивается значение Y, то есть Y=Y+1, и при умножении используется новое значение Y, равное 6. В результате получим 2*6=12, то есть Result примет значение 12.
В случае постфиксной операции сначала используется старое значение переменной, после которой стоит операция, а затем оно изменяется. Например, пусть int X=2, Y=5, Result; Result= X*Y++; Сначала вычисляется произведение со старым значением Y, то есть Result примет значение 2*5=10, а затем значение Y увеличится и станет равным 6.
Пусть int X=2, Y=5, Result; Интерес представляет следующая запись: Result=X+++Y; Какая здесь операция — постфиксная для X или префиксная для Y? Это равносильно Result=(X++)+Y; то есть сначала выполняется сложение 2+5, а затем увеличивается X. В результате получим значение Result, равное 7, X примет значение 3, а Y не изменится. Во избежание риска в таком случае рекомендуется использовать скобки, то есть вторая запись нагляднее и надёжнее.
Замечание. Начинающие могут не использовать эти возможности, а программировать в стиле Pascal. Например, вместо Result= X*Y++; можно написать: Result= X*Y; Y=Y+1;
5) Ещё одна важная особенность присваивания, не обязательная для начинающих, была описана в 2.5 и будет использоваться при изучении других операторов. Например, в компактной записи cout<<(R=a*10)<<endl; не надо дважды записывать один и тот же идентификатор R. Это равносильно R=a*10; cout<<R<<endl;
Запись R=(W=a)*b; равносильна двум операторам: W=a; R=W*b;
Дата добавления: 2016-07-18; просмотров: 1926;