Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Archive / Курс лекций.doc
Скачиваний:
303
Добавлен:
30.03.2015
Размер:
2.23 Mб
Скачать

4.2. Встроенные типы данных

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

Рис. 9. Типы данных

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

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

Таблица 2

Типы данных

Обозначение

Размер

(байт)

Диапазон

Тип данных

1

char,

signed char

1

-128...127

Символьный

со знаком

2

unsigned char

1

0...255

Символьный без знака

3

short, short int, signed short ,

signed short int

2

-32768...

32767

Короткое целое со знаком

4

unsigned short,

unsigned short int

2

0...65535

Короткое целое без знака

5

int, signed,

signed int

1, 2, 4

Зависит от

реализации

Целое

6

unsigned,

unsigned int

1, 2, 4

Зависит от реализации

Целое без знака

7

long, signed long,

long int

4

-2147483648…

2147483647

Длинное целое со знаком

8

unsigned long

4

0...4294967295

Длинное целое без знака

9

float

8

-3.4e-38...

3.14e+38

Вещественное число с плавающей точкой

10

double

8

-1.7е-308..1.7е308

Вещественное число удвоенной точности

11

long double

10

-3.4e-4932...

3.4e4932

Длинное вещественное число удвоенной точности

Основные типы в C++ подразделяются на две группы: целочисленные типы и типы с плавающей точкой (для краткости их будем называть плавающими типами). Это арифметические типы.

В C++ нет жёсткого стандарта на диапазоны значений арифметических типов (в стандарте языка оговариваются лишь минимально допустимые значения). К целочисленным типам относятся типы, представленные следующими именами основных типов: char, short, int и long.

Имена целочисленных типов могут использоваться в сочетании с парой модификаторов типа: signed и unsigned.

Эти модификаторы изменяют формат представления данных, но не влияют на размеры выделяемых областей памяти.

Модификатор типа signed указывает, что переменная может принимать как положительные, так и отрицательные значения. Возможно, что при этом самый левый бит области памяти, выделяемой для хранения значения, используется для представления знака. Если этот бит установлен в 0, то значение переменной считается положительным. Если бит установлен в 1, то значение переменной считается отрицательным.

Модификатор типа unsigned указывает, что переменная принимает неотрицательные значения. При этом самый левый бит области памяти, выделяемой для хранения значения, используется так же, как и все остальные биты области памяти – для представления значения.

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

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

Внутри блока (функции) глобальное имя можно переопределять для ссылки на другой объект программы. После выхода из блока глобальное имя вновь обретает прежний статус и значение. Следует отметить, что переопределение глобальных переменных в локальные в блоках при разработке крупных программных комплексов может привести к ошибкам, которые при отладке и тестировании программы очень сложно выявить, поэтому такие переопределения стоит минимизировать.

Память под локальные переменные выделяется динамически на время выполнения функции. После завершения выполнения функции эта память будет доступна для других функций, поэтому хранящиеся в локальных переменных значения не являются неизменными при последующих вызовах этой функции. Если необходимо сохранять значение локальной переменной между вызовами функций, то ее описывают с модификатором (спецификатором) static. С языке С/С++ существуют несколько модификаторов, которые определяют область видимости и время жизни переменной, т.е. к какому классу памяти она принадлежит (табл. 3).

Таблица 3.

Модификаторы переменных

Модифи-каторы

Применение

Область видимости

Выделение памяти

Пояснения

1

2

3

4

5

auto

Автоматическая локальная переменная

Блок

Временное

По умолчанию принимается для любой переменной

register

Регистровая локальная

Блок

Временное

Как правило, размещается в машинном регистре

extern

Внешняя

Блок

Может описываться в другом файле; видна загрузчику

static

Статическая глобальная переменная

файл

Постоянное

Данная глобальная переменная недоступна другим файлам, т.е. невидна для загрузчика.

1

2

3

4

5

volatile

Изменяющаяся переменная

Переменная может изменяться не только программой, но и например, периферийным устройством

Скалярные автоматические переменные при их описании не обнуляются. Модификатором register рекомендуется описывать часто используемые переменные. Если пользователь, не указал инициализирующее значение для внешней или глобальной переменной, то ей будет присвоено значение 0. При каждом обращении к переменной типа volatile программа заново вычисляет ее значение.

Объявление типа данных в общем виде имеет следующий формат:

[<класс памяти>] <тип><идентификатор> = < значение> ;

Примеры объявлений: static char c, b; register int x=0;

Типизированные константы описываются как:

const <тип><идентификатор> = < значение> ;

Константы языка программирования С/С++ могут иметь различный формат записи (табл. 4).

Таблица 4.

Константы языка С/С++

Константа

Формат

Пример

Символьная

Целая

Вещественная

Строковая

Символ заключенный в апострофы

Десятичный

Восьмеричный. Запись начинается с нуля, за которым следуют восьмеричные цифры

Шестнадцатеричный. Запись начинается с 0х или 0Х, за которыми следуют шестнадцатеричные цифры

Десятичный

Экспоненциальный, Е – десятичное основание

Совокупность символов, заключенных в кавычки

‘d’

123

043

0x12A

0.25

2.4E-2

“day”