DEV Community

Cover image for Язык программирования Си. Глава(Chapter) 5
Amirshokh
Amirshokh

Posted on • Edited on

Язык программирования Си. Глава(Chapter) 5

1. Тело(Block) цикла внутри фигурных скобок {}, выполняется в зависимости от истинности условия(Condition) внутри круглых скобок ().

while(condition) //while condition is true
{block} //execute block of statements 
Enter fullscreen mode Exit fullscreen mode

2. Объект данных(Data Object) — область данных для хранения значений.
Модифицируемое l-значение(Modifiable lvalue) или значение локатора объекта(Object Locator Value) — любое имя или выражение, идентифицирующий конкретный объект данных.
r-значение(rvalue) или значение выражения(Value of an Expression) — может быть присвоено l-значению.

int n, *ptr1, *ptr2, arr[5];
const int pi = 3.14;

n = 3; //variable n is lvalue and literal 3 is rvalue
n + 2 = 5; //error: expression 'n + 2' is not lvalue
((n + 4 < 1) ? ptr1 : ptr2) = arr; //conditional operator returns lvalue
pi = 6.28; //error: variable pi is non-modifiable lvalue
ptr1 = (ptr2 = &n); //variable n is lvalue but expression '&n' is rvalue, variable ptr2 is lvalue, expression (ptr2 = &n) is rvalue
ptr1 = &(n = pi); //error: expression (n = pi) is rvalue and doesn't refer to specific memory location therefore its address can't be taken
Enter fullscreen mode Exit fullscreen mode

3. Фундаментальные бинарные(Binary) или двухместные(Dyadic) и унарные(Unary) операторы(Operators) и их операнды(Operands), то есть аргументы операции.
Fundamental Operators

4. Арифметические(Arithmetic) операторы:

  • операции сложения(Addition) и вычитания(Subtraction): 5 + 4 и a - b;
  • операции знака(Sign): -4 и +a;
  • операция умножения(Multiplication): 2 * 2 или a * b;
  • операция деления(Division) и деления по модулю(Modulus) с усечением в направлении нуля(Truncating Toward Zero): 4 / 2 и a % b.
/*
division works according to formule:
a = b * q + r
a / b = floor(a / b) = q
a % b = a - b * floor(a / b)
a = b * (a / b) + (a % b)
*/

11 / -5 == -2; //-2.2 is truncated to -2 not -3
-11 / 5 == -2; //quotient is floored
11 % -5 == 1; //dividend is positive, remainder is also positive
-11 % 5 == -1; //remainder is nagative like dividend
Enter fullscreen mode Exit fullscreen mode

5. Дополнительные операции

  • операция инкремента(Increment) и декремента(Decrement) в префиксной(Prefix) и постфиксной(Postfix) записи: ++a и a-- соответственно;
  • операция присваивания(Assignment) и множественное присваивание(Multiple Assignment): a = 1 и a = b = c;
  • оператор sizeof и возвращаемый тип size_t(обычно unsigned int или unsigned long в зависимости от системы): sizeof 2, sizeof b или sizeof(int).
int a = 1, b = 1;
int a_post, b_pre;
a_post = a++; //a = 2, a_post = 1
b_pre = ++b; //b = 2, b_pre = 2
Enter fullscreen mode Exit fullscreen mode

6. Приоритет(Precedence) и ассоциативность(Associativity) операторов, которые совместно используют операнды(Shared Operands) и дерево выражений(Expression Tree).
Image description

7. Программа(Program) — это последовательный набор операторов(Series of Statements), в этой записи понимать как инструкция.
Оператор(Statement), пустой оператор(Null Statement) и составной оператор(Compound Statement) или блок(Block).

int a = b + 2; //example of a statement
3; //another example of a statement

; //example of null statement
;; //two null statements

//example of compund statement bound in braces
{
    3 + 3 == 6;
    ;
    int arr[10];
}
Enter fullscreen mode Exit fullscreen mode

8. Полное выражение(Full Expression) — это выражение, которое не является подвыражением(Subexpression) другого выражения; значение выражения(Value of Expression); порядок вычисления выражений(не обязательно слева направо, если операнды не используют оператор совместно).
Побочные эффекты(Side Effects) — модификации объекта данных или файла, и точка следования(Sequence Point) — место оценки всех побочных эффектов при присваивании, инкрементировании или декрементировании.

a = 6 + (b = 3 + 8); //satement equivalent to statement 17;
a = 6 + (b = 3 + 8) //full expression has value 17
6 + (b = 3 + 8) //subexpression has value 17
b = 3 + 8 //subexpression has value 11
3 + 8 //subexpression has value 11
3 //subexpression has value 3

//assigning 11 to b and 17 to a is side effect of statement
c = 0; //here side effect is assigning 0 to c

a = 1; b = 8; // ; is a sequence point
while (count++ < 10) //end of condition is sequence point
    printf("%d", count); //count was incremented in condition
Enter fullscreen mode Exit fullscreen mode

9. Неявные(Implicit) и явные(Explicit) преобразования типов(Type Conversions):

  • при вычислении выражений char и short, signed и unsigned автоматически преобразуются в int или unsigned int, например unsigned short преобразуется в unsigned int, если размеры short и int в реализации равны;
  • при передаче в качестве аргумента типы char и short преобразуются в int, а float в double.
  • повышения(Promotions) преобразуются по порядку int -> unsigned int -> long -> unsigned long -> long long -> unsigned long long -> float -> double -> long double;
  • понижения(Demotions) задаются с помощью операции приведения(Cast Operator): (int) или (double);
  • усечение(Truncation) — обрезание информации(см. Глава 4.6).
//Implicit type conversions
true + true; //promoted to int
'z' - 'a'; //promoted to int
10 * 0.1f; //promoted to float
int pi = 3.14; //demoted to int
double a = 1; //promoted to double

//Explicit type conversions
(int)'a'; //'a' casted to int
(int)(3.14 - true); //(3.14 - true) casted to int
(double)(1 / 3); //(1 / 3) casted to double but the result is 0
(double)1 / (double)3 //1 and 3 casted to double now division is 0.33...
(char)INT_MAX; //INT_MAX casted and demoted with truncation to char
Enter fullscreen mode Exit fullscreen mode

Язык программирования Си 6 издание. Стивен Прата
C Primer Plus 6th edition. Stephen Prata

Image of Datadog

How to Diagram Your Cloud Architecture

Cloud architecture diagrams provide critical visibility into the resources in your environment and how they’re connected. In our latest eBook, AWS Solution Architects Jason Mimick and James Wenzel walk through best practices on how to build effective and professional diagrams.

Download the Free eBook

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs