На этом шаге мы познакомимся с имеющимися в языке программирования С++
типами, а
также способами размещения переменных в памяти.
Для определения и описания переменных основных типов используются следующие ключевые слова, каждое из которых в отдельности может выступать в качестве имени типа:
При определении переменных им можно приписывать начальные значения, которые заносятся в выделяемую для них память в процессе инициализации. Примеры определений:
char newsimbol = '\n' ; long filebegin = 0L; double pi = 3.1415926535897932385;
В обозначении типа может использоваться одновременно несколько служебных слов. Например, определение: long double zebra, stop; вводит переменные с именами zebra и stop вещественного типа удвоенной точности, но явно не присваивает этим переменным никаких начальных значений.
Употребляемые как отдельно, так и вместе с другими именами типов служебные слова unsigned (беззнаковый) и signed (знаковый) позволяют для арифметического или символьного типа выбирать способ учета знакового разряда:
unsigned int i, j, k; // Значения от 0 до 65535. unsigned long L, M ,N; // Значения от 0 до 4294967295. unsigned char с, s; // Значения от 0 до 255.
При таком определении переменные i, j, k могут принимать только целые положительные значения в диапазоне от 0 до 65535 и т.д.
Применение в определениях типов отдельных служебных слов int, char, short, long эквивалентно signed int, signed char, signed short, signed long. Именно поэтому служебное слово signed обычно опускается в определениях и описаниях. Использование при задании типа только unsigned эквивалентно unsigned int.
Основные типы данных представлены в таблице 1.
Таким образом, тип определяет размер памяти, который выделен для хранения значения переменной. Помимо этого важной характеристикой является также способ размещения этой переменной в памяти и время ее существования. Для явного задания способа размещения используются следующие спецификаторы:
Кроме явных спецификаторов, на выбор класса памяти значительное влияние оказывают размещение определения и описаний объекта в тексте программы. Такими определяющими частями программы являются блок, функция, файл с текстом кода программы (модуль) и т.д. Таким образом, класс памяти, то есть размещение объекта (в регистре, в стеке, в динамически распределяемой памяти, в сегменте) зависит как от синтаксиса определения, так и от размещения определения в программе.
Продолжительность существования объектов (в частности, переменных) - это период, в течение которого идентификаторам в программе соответствуют некоторые значения. Определены три вида продолжительности: статическая, локальная и динамическая.
Объектам со статической продолжительностью существования память выделяется в начале выполнения программы и сохраняется до окончания ее обработки. Статическую продолжительность имеют функции и файлы. Остальным объектам статическая продолжительность существования может быть задана с помощью спецификаторов класса памяти static и extern. При отсутствии явной инициализации такие объекты по умолчанию инициализируются нулевыми, или пустыми значениями.
Переменные с локальной продолжительностью существования создаются при каждом входе в блок или функцию, где они описаны, и уничтожаются при выходе. Такие объекты должны быть инициализированы только явным образом. Память для них выделяется в регистрах или в стеке. Область действия такой переменной - блок или функция.
Объекты с динамической продолжительностью существования
создаются и уничтожаются
с помощью явных операторов в процессе выполнения программы. Для
создания используется операция
new и функция malloc(), а для уничтожения - операция
delete или функция
free().
Мы перечислили основные типы переменных и способы размещения их в
памяти.
На следующем шаге мы познакомимся с общей структурой программы на С++.