Скалярные типы и выражения

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

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

  • char (символьный);
  • short (короткий целый);
  • int (целый);
  • long (длинный целый);
  • float (вещественный);
  • double (вещественный с удвоенной точностью);
  • void (отсутствие значения).

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

     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 значащих
цифр).

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

  • auto (автоматически выделяемая, локальная память) - используется
    при
    определении объектов блока (функции). При входе в блок объекту (переменной)
    выделяется
    память, которая освобождается при выходе из блока. По умолчанию всем
    переменным
    присваивается этот спецификатор;
  • register (автоматически выделяемая, по возможности регистровая
    память) -
    аналогичен auto, но для размещения объектов используются регистры,
    а не участки
    основной памяти. В случае отсутствия регистровой памяти компилятор
    обрабатывает такие
    объекты как объекты автоматической памяти;
  • static (внутренний тип компоновки и статическая продолжительность
    существования) -
    объект с таким спецификатором будет существовать в пределах того файла с
    исходным текстом
    программы или модуля, где он определен. Класс памяти static может
    приписываться переменным
    и функциям;
  • extern (внешний тип компоновки и статическая продолжительность
    существования) -
    объект этого класса глобален, то есть доступен во всех модулях (файлах)
    программы.
    Класс extern может быть приписан переменной или функции.

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

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

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

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

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

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

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий