Язык программирования C



Операции увеличения и уменьшения


В языке "C" предусмотрены две необычные операции для увеличения и уменьшения значений переменных. Операция увеличения ++ добавляет 1 к своему операнду, а операция уменьшения -- вычитает 1. Мы часто использовали операцию ++ для увеличения переменных, как, например, в

if(c == '\n') ++i;

Необычный аспект заключается в том, что ++ и -- можно использовать либо как префиксные операции (перед переменной, как в ++n), либо как постфиксные (после переменной: n++). Эффект в обоих случаях состоит в увеличении n. Но выражение ++n увеличивает переменную n до использования ее значения, в то время как n++ увеличивает переменную n после того, как ее значение было использовано. Это означает, что в контексте, где используется значение переменной, а не только эффект увеличения, использование ++n и n++ приводит к разным результатам. Если n = 5, то

х = n++;

устанавливает х равным 5, а

х = ++n;

полагает х равным 6. В обоих случаях n становится равным 6. Операции увеличения и уменьшения можно применять только к переменным; выражения типа х=(i+j)++ являются незаконными.

В случаях, где нужен только эффект увеличения, а само значение не используется, как, например, в

if ( c == '\n' ) nl++;

выбор префиксной или постфиксной операции является делом вкуса. но встречаются ситуации, где нужно использовать именно ту или другую операцию. Рассмотрим, например, функцию squeeze(s,c), которая удаляет символ 'с' из строки s, каждый раз, как он встречается.

squeeze(s,c) /* delete all c from s */ char s[]; int c; { int i, j;

for ( i = j = 0; s[i] != '\0'; i++) if ( s[i] != c ) s[j++] = s[i]; s[j] = '\0'; }

Каждый раз, как встречается символ, отличный от 'с', он копируется в текущую позицию j, и только после этого j увеличивается на 1, чтобы быть готовым для поступления следующего символа. Это в точности эквивалентно записи

if ( s[i] != c ) { s[j] = s[i]; j++; }

Другой пример подобной конструкции дает функция getline, которую мы запрограммировали в лекции №1, где можно заменить

if ( c == '\n' ) { s[i] = c; ++i; }




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