КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА

Turbo C++ Version 1.0 Programmer’s Guide

Комментировать

LIB.com.ua [электронная библиотека]: : TURBO C++ Version 1.0 Programmer’s Guide

— 43 —

Методы стандартных арифметических преобразований Таблица 1.15
————————————————————
Тип Преобразование вМетод
————————————————————
char intРасширение нулем или знаком
(в зависимости от умолчания
для типа char)

unsigned char intЗаполнение старшего байта
нулем (всегда)

signed char intРасширение знаком (всегда)

short intТо же значение

unsigned short unsigned int То же значение

enum intТо же значение
————————————————————

Специальные преобразования типов char, int и enum

Обсуждаемые в данном разделе преобразования специфичны
для Turbo C++.

Присваивание объекта типа signed char (например,пере-
менной) интегральномуобъекту вызывает автоматическое расши-
рение знаком. Объекты типа signed char используетрасширение
знаком всегда; объекты типаunsigned charпри преобразовании
вint всегда устанавливают старший байт в ноль.

Преобразование более длинных интегральных типов к более
коротким типам ведет к усечению старших битов, оставляя
младшие без изменения. Преобразование более короткого интег-
рального типа к более длинному либо расширяет лишние биты
нового значения знаком, либо заполняет их нулем, в зависи-
мости от того, является ли более короткий тип signed или
unsigned, соответственно.

Инициализация

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

— нулем, если это объект арифметического типа
— null, если что указатель

В случае автоматического распределения памяти исходное
значение динамической локальной переменной непредсказуемо.

Синтаксис инициализаторов следующий:
инициализатор
= выражение
= (*список-инициализаторов*)*)
(список выражений)

список-инициализаторов
выражение
список-инициализаторов, выражение
(*список-инициализаторов*)*)

Ниже приводятся правила, управляющие инициализаторами:

— 44 —

1. Число инициализаторов в списке инициализаторов не
может превышать число инициализируемых объектов.

2. Инициализируемый элемент должен быть типа объекта
или массивом неизвестной размерности.

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

а. в инициализаторе объекта, имеющего статическую дли-
тельность (в Turbo C++ не требуется)

b. в списке инициализаторов для массива, структуры или
объединения (также допустимы выражения с использованием
sizeof)

4. Если объявление идентификатора имеет контекст блока,
и идентификатор имеет внешнюю или внутреннюю компоновку,
объявление не может иметь инициализатор для идентификатора.

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

памяти.

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

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

— списком инициализаторов, как описано в следующем раз-
деле
— отдельным выражением с типом, совместимым с объедине-
нием или структурой. В этом случае исходное значение объекта
берется из выражения.

Массивы, структуры и объединения

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

int days[7] = (* 1, 1, 1, 1, 1, 1, 1)

Этими правилами можновоспользоваться для инициализации
символьных массивов и широких символьных массивов:

1. Можно инициализировать массивы символьного типа с
помощью строки литералов, опционально заключенной в фигурные
скобки. Каждый символ строки, включая нулевой терминатор,

— 45 —
инициализирует последовательно расположенные элементы масси-
ва. Например, вы могли объявить:

char name[] = (* «Unknown» *);

установив тем самым массив из восьми элементов, элемен-
ты которого равны ‘U'(для name[0]), ‘n’ (для name[1]), и
т.д. (включая нулевой терминатор.)

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

Ниже приводится пример инициализации структуры:

struct mystruct (*
int i;
char str[21];
double d;
*) s = (* 20, «Borland», 3.14 *);

Сложные компоненты структуры,такиекак массивыили струк-
туры, могутбытьинициализированы соответствующими выражениями
во вложенных фигурных скобок. Можно убрать фигурные скобки,
но тогда приходится выполнять дополнительные правила, и та-
кая практика не рекомендуется.

Простые объявления

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

тип-данных перем1 , перем2 ,…;

где перем1, перем2, … это произвольная последователь-
ность отдельных идентификаторов с опциональными инициализа-
торами. Каждая из переменных объявляется с указанным ти-
пом-данных. Например,

int x = 1, y = 2;

создает две целочисленных переменных x и y (и
инициализирует их значениями 1 и 2, соответственно).

Это былиобъявления определения; при этом распределялась
память и выполнялась инициализация.

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

В C++ инициализатор статического объекта может являться
любым выражением, включающим в себя константы и ранее опре-
деленные переменные и функции.

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *