Учебник по программированию на C для Linux. Часть 12. Операторы присваивания и условные выражения
В этой продолжающейся серии руководств по программированию на C мы уже обсудили некоторые основные вещи, такие как арифметические, логические и реляционные операторы, а также условные циклы, такие как if и while. Кроме того, в этом руководстве основное внимание будет уделено операторам присваивания (кроме =) и условным выражениям.
Начнем с операторов присваивания. Если вы до сих пор создавали базовые программы на языке C (а я уверен, что у вас это получится, особенно после того, как вы ознакомитесь с нашей серией руководств), велики шансы, что вы сделали что-то похожее на следующее:
a = a + 1;
Верно?
Новое, что мы собирались узнать сегодня, это то, что вы можете переписать это выражение следующим образом:
a += 1;
Да, += — это оператор, который также называется оператором присваивания.
Теперь, если я скажу, что использование таких операторов присваивания делает код более компактным и читаемым, некоторые из вас могут возразить, что в контексте примера, который мы использовали, оператор приращения был бы столь же хорош, поскольку он также гарантирует, что значение получает увеличилось на 1.
a++;
Я согласен, но подумайте о других сценариях, таких как следующие:
b = b + 10;
b = b + c
В этих случаях использование оператора присваивания определенно упрощает написание, чтение и проверку кода на один шаг.
Все еще не убеждены? Возможно, следующий общий пример даст вам еще лучшее представление о значении операторов присваивания. Взглянем:
arr1[arr2[integer1 + integer2] + arr3[integer3 + integer4] + arr4 [integer5 + integer6]] = arr1[arr2[integer1 + integer2] + arr3[integer3 + integer4] + arr4 [integer5 + integer6]] + 5
Чтобы понять эту строку кода, нужно время, потому что вы должны убедиться, что два массива (по обе стороны от оператора =) ссылаются на одно и то же значение или нет. В данном случае это так, поэтому лучше использовать оператор присваивания следующим образом:
arr1[arr2[integer1 + integer2] + arr3[integer3 + integer4] + arr4 [integer5 + integer6]] += 5;
Таким образом, использование оператора присваивания в этом случае не только сделало строку очень простой для понимания, но и сделало ее более удобной для компилятора в том смысле, что она может помочь компилятору создавать эффективный код.
Теперь, когда вы убедились (я очень надеюсь, что так и есть) в том, что операторы присваивания полезны, вот список операторов, которым соответствует бинарный оператор:
+ - * / % << >> & ^ |
Первые пять операторов в списке мы уже обсуждали в наших руководствах. Последние пять являются побитовыми операторами, и мы обсудим их в одном из наших будущих руководств. Между тем, вот краткий справочник по операторам присваивания, соответствующим некоторым из этих операторов:
a += b;
a -= b;
a *= b;
a /= b;
a %= b;
Итак, в целом, вы можете иметь в виду, что следующее:
expression1 = (expression1) op (expression2)
можно выразить как:
expression1 op= expression2
где op — используемый оператор, например +, -, * и т. д.
Обратите внимание, что следующее выражение, а также выражения, подобные ему:
a *= b - c
будет расширяться как:
a = a * (b-c)
Надеюсь, мне удалось объяснить концепцию операторов присваивания хотя бы на базовом уровне. Двигаясь дальше, теперь давайте быстро обсудим условные выражения.
Возьмем следующий пример:
if(a==b)
c = c + 1;
else
c = c - 1;
Условные выражения помогают вам писать подобную логику в одной строке. Вот как:
c = (a==b) ? (c+1) : (c -1)
Итак, здесь сначала проверяется условие (a==b). Если это правда, то (c+1) присваивается c, иначе (c-1) присваивается c. Вот пример кода, чтобы было понятнее:
int main()
{
int a = 6, b = 5, c = 9;
c = (a==b) ? (c+1) : (c -1) ;
printf("\n %d \n", c);
return 0;
}
Поскольку здесь a не равно b, поэтому присваивается c (c-1), что означает, что новое значение c становится равным 8. На всякий случай, если вам нужно, вот общая форма условных выражений:
expression1 ? expression2 : expression3
Надеюсь, вы получили базовое представление об операторах присваивания и условных выражениях. Теперь вам предлагается использовать их в своей повседневной деятельности по программированию, и если у вас возникнут какие-либо проблемы, не забудьте оставить нам комментарий здесь.