Язык программирования C. Структура простейшей программы на языке C, страница 2

Если переменная определена внутри тела функции, она располагается в стеке данного приложения и называтся автоматической.Время ее существования определяется временем «жизни» функции, которой она принадлежит. Как только функция завершает свою работу, стек очищается и переменная прекращает свое существование. При следующем вызове функции в стеке опять отводится место под автоматические переменные. Автоматические переменные доступны («видны») только внутри области своего определения, то есть внутри той функции (блока), в которой они определены. Отсюда появляется возможность использовать переменные с одинаковыми именами в различных функциях -–в каждой функции это будет своя собственная переменная, помещенная в стек.

Переменные и константы, определенные вне тела функции являются статическими. Место для них отводится в специальной области памяти приложения - «куче». Они существуют все время, пока приложение исполняется. Область видимости статических переменных определяется в пределах того файла, где они определены (если при их описании не использован модификатор extern).

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

Если быть до конца честным, то существует еще один класс памяти – register – он подобен автоматическому классу, но исполняющая система для переменных данного типа сначала старается разместить их в свободном регистре, а если такового нет – то помещает их в стек как обычные переменные класса auto.

1.2. Арифметико-логические операции над переменными

Операции языка С можно разбить на 13 категорий. Наивысшее значение приоритета имеет категория 1. Операции одной категории имеют одинаковое старшинство и исполняются в порядке следования. Операции категории 2 (унарные),  14 (условные) и 15 (присваивания) исполняются слева направо.

Категория

Операция

Пояснение

1. Высшая

()

[]

->

::

.

Вызов функции

Выбор элемента массива

Косвенный выбор элемента

С++: глобальный доступ

Прямой выбор элемента

2. Унарные операции

!

~

+

++

-&

*

sizeof

new

delete

Логическое отрицание (NOT)

Побитовая инверсия

Унарный плюс

Унарный минус

Увеличение на единицу

Уменьшение на единицу

Адрес

Взятие значения по адресу

Размер операнда в байтах

С++: динамическое размещение объекта

С++: динамическое уничтожение объекта

3. Мультипликативные

*

/

%

Умножение

Деление

Вычисление остатка от деления

4. Доступ к элементам

.*

->*

С++: взятие значения

С++: взятие значения

5. Аддитивные

+

-

Бинарный плюс

Бинарный минус

6. Сдвиги

>> 

<< 

Сдвиг направо

Сдвиг налево

7. Сравнения

<=

>=

Меньше

Меньше или равно

Больше

Больше или равно

8. Равенство

==

!=

Равно

Не равно

9. Побитовые

&

^

|

Побитовое И (AND)

Побитове исключающее ИЛИ (XOR)

Побитове ИЛИ (OR)

10. Логические

&&

||

Логическое И (AND)

Логическое ИЛИ (OR)

11. Условное выражение

? :

(a ? x : y) означает: « если a истина, то x, иначе y»

12. Присваивание

=

*=

/=

%=

+=

-=

&=

^=

|=

<<=

>>=

Простое присваивание

Присвоить произведение

Присвоить частное

Присвоить остаток от деления

Присвоить сумму

Присвоить разность

Присвоить побитовое AND

Присвоить побитовое XOR

Присвоить побитовое OR

Присвоить сдвинутое налево

Присвоить сдвинутое направо

13. Запятая

,

Последовательное вычисление