Шаг 4.
Скалярные типы и выражения

    На этом шаге мы познакомимся с имеющимися в языке программирования С++ типами, а также способами размещения переменных в памяти.

    Для определения и описания переменных основных типов используются следующие ключевые слова, каждое из которых в отдельности может выступать в качестве имени типа:

    При определении переменных им можно приписывать начальные значения, которые заносятся в выделяемую для них память в процессе инициализации. Примеры определений:

     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.

Таблица 1. Основные типы данных
Тип данных
Размер, бит
Диапазон значений
Назначение типа
unsigned char
8
0..255
Небольшие целые числа и коды символов.
char
8
-128...127
Очень малые целые числа и ASCII-коды.
enum
16
-32768...32767
Упорядоченные наборы целых значений.
unsigned int
16
0...65535
Большие целые и счетчики циклов.
short int
16
-32768...32767
Небольшие целые, управление циклами.
int
16
-32768...32767
Небольшие целые, управление циклами.
unsigned long
32
0...4294967295
Астрономические расстояния.
long
32
-2147483648...2147483647
Большие числа, популяции.
float
32
3.4Е-38...3.4Е+38
Научные расчеты (7 значащих цифр).
double
64
1.7Е-308...1.7Е+308
Научные расчеты (15 значащих цифр).
long double
80
3.4Е-4932...1.1Е+4932
Финансовые расчеты (19 значащих цифр).

    Таким образом, тип определяет размер памяти, который выделен для хранения значения переменной. Помимо этого важной характеристикой является также способ размещения этой переменной в памяти и время ее существования. Для явного задания способа размещения используются следующие спецификаторы:

    Кроме явных спецификаторов, на выбор класса памяти значительное влияние оказывают размещение определения и описаний объекта в тексте программы. Такими определяющими частями программы являются блок, функция, файл с текстом кода программы (модуль) и т.д. Таким образом, класс памяти, то есть размещение объекта (в регистре, в стеке, в динамически распределяемой памяти, в сегменте) зависит как от синтаксиса определения, так и от размещения определения в программе.

    Продолжительность существования объектов (в частности, переменных) - это период, в течение которого идентификаторам в программе соответствуют некоторые значения. Определены три вида продолжительности: статическая, локальная и динамическая.

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

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

    Объекты с динамической продолжительностью существования создаются и уничтожаются с помощью явных операторов в процессе выполнения программы. Для создания используется операция new и функция malloc(), а для уничтожения - операция delete или функция free().

    Мы перечислили основные типы переменных и способы размещения их в памяти. На следующем шаге мы познакомимся с общей структурой программы на С++.


Предыдущий шаг Содержание Следующий шаг