Если переменная определена внутри тела функции, она располагается в стеке данного приложения и называтся автоматической.Время ее существования определяется временем «жизни» функции, которой она принадлежит. Как только функция завершает свою работу, стек очищается и переменная прекращает свое существование. При следующем вызове функции в стеке опять отводится место под автоматические переменные. Автоматические переменные доступны («видны») только внутри области своего определения, то есть внутри той функции (блока), в которой они определены. Отсюда появляется возможность использовать переменные с одинаковыми именами в различных функциях -–в каждой функции это будет своя собственная переменная, помещенная в стек.
Переменные и константы, определенные вне тела функции являются статическими. Место для них отводится в специальной области памяти приложения - «куче». Они существуют все время, пока приложение исполняется. Область видимости статических переменных определяется в пределах того файла, где они определены (если при их описании не использован модификатор 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. Запятая |
, |
Последовательное вычисление |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.