Понедельник, Июль 5th, 2010

Шпоры по С++

В этом случае операция new возвращает указатель на начало массива. Дальнейшие действия с элементами массива структур подчиняются правилам индексации и доступа к элементам структур. Например, разрешен такой оператор:
last[0] .next = NULL;

17 Объединение разнотипных элементов
Объединения вводятся с помощью служебного слова union. Пусть дана структура
struct { long L; int i1, i2; char c[4]; } STR;
Каждый элемент структуры имеет свое собственное место в памяти, и размещаются эти элементы последовательно. Определим очень похожее внешне на структуру STR объединение UNI:
union { long L ; int i1, i2; char c[4]; } UNI;
Количество элементов в объединении с именем UNI и их типы совпадают с количеством и типами элементов в структуре STR. Но существует одно очень важное отличие — все элементы объединения имеют один и тот же начальный адрес размещения в памяти. То есть объединение можно рассматривать как структуру, все элементы которой при размещении в памяти имеют нулевое смещение от начала. Тем самым все элементы объединения размещаются в одном и том же участке памяти. Размер участка памяти, выделяемого для объединения, определяется максимальной длиной его элементов. Как и для структур, для объединений может быть введен программистом производный тип, определяющий «внутреннее строение» всех объединений, относящихся к этому типу.
union имя_объединяющего_типа { элементы_объединения };
Пример объединяющего типа:
union mixture { double d; long E[2]; int K[4]; };
Введя тип объединения, можно определять конкретные объединения, их массивы, а также указатели и ссылки на объединения:
mixture mA, mB[4];// Объединение и массив объединений
mixture *pmix; // Указатель на объединение
mixture& rmix = mA;// Ссылка на объединение
Для обращения к элементу объединения можно использовать либо уточненное имя имя_объединения.имя_элемента, либо конструкцию, включающую указатель: указатель_на_объединение -> имя_элемента; (*указатель_на_объединение).имя_элемента, либо конструкцию, включающую ссылку ссылка_на_объединение. имя_элемента
mA.d = 64.8;
mB[2]. E[1] = 10L;
pmix = &mB[0];
pmix -> E[0] = 66;
cin >> ( *pmix ).K[1];
cin >> rmix. E[0];
Заносить значения в участок памяти, выделенный для объединения, можно с помощью любого из его элементов. То же самое справедливо и относительно доступа к содержимому участка памяти, выделенного для объединения. Основное достоинство объединения — возможность разных трактовок одного и того же содержимого (кода) участка памяти. Например, введя объединение union { float F; unsigned long K; } FK; можно занести в участок памяти, выделенный для объединения FK, вещественное число: FK.F = 3.141593; а затем рассматривать код его внутреннего представления как некоторое беззнаковое длинное целое: cout << FK.K; ( в данном случае будет выведено 10785330012).

Страницы: 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 31 32 33 34 35 36 37 38 39 40 41 42

Категория: Шпоры