Поиск по сайту:

Учебник по программированию на 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

Надеюсь, вы получили базовое представление об операторах присваивания и условных выражениях. Теперь вам предлагается использовать их в своей повседневной деятельности по программированию, и если у вас возникнут какие-либо проблемы, не забудьте оставить нам комментарий здесь.