Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
slaid_5_portal_2011.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.41 Mб
Скачать

Об'єднаний тип

Тип, значення якого в будь-який момент часу є значенням одного з типів, оголошених в опису, називається об'єднаним (united type) або об'єднанням.

При створенні об'єкта цього типу пам'ять для його значення відводиться під більше (за розміром) значення типу, оголошеного в об'єднанні, тому, що всі значення об’єкту об’єднаного типу розміщуються на єдиній ділянці пам’яті. Тип є лише в мові С.

Доступ до значень об'єднаного типу відбувається шляхом зазначення позначення об'єкту цього типу та позначення відповідного компонента типу, що ввійшов в опис типу.

С:

union perform

{

int m_nVal;

char m_cLit;

};

perform MyUnion, *pMyUnion;

int nI;

pMyUnion = &MyUnion;

MyUnion.m_cLit = 'A'; // MyUnion.m_ nVal = 99 =>

// MyUnion.m_cLit == 'c';

pMyUnion->m_cLit = MyUnion.m_cLit;

(*pMyUnion).m_cLit = 'B';

nI = MyUnion.m_nVal;

nI = sizeof(perform); // nI == 2

Розміщення в пам’яті значення об’єднання

Тут значення компонента об’єднання m_nVal займають два байти (тому що вони належать типу integer), а значення компонента m_cLit – один байт.

С:

union int_or_long {

int i;

float l;

} a_number = {45};

main(){

// {45, 6.305843e-44)

a_number.l = 22.89; // {7864, 22.89)

}

union int_or_long {

int i;

float l;

} a_number = {45.78};

main(){

// {45, 6.305843e-44)

a_number.l = 22.89; // {7864, 22.89)

}

Складений тип

Типи, значення яких утворюються з кількох значень одного того ж самого чи різних типів, називаються складеними (aggregate types).

Оскільки значення складеного типу утворюється з кількох значень, то воно називається мультизначенням. Якщо мультизначення утворюється зі|із| значень одного й того самого типу, то воно називається гомогенним. Якщо мультизначення складається зі значень різних типів, то воно називається гетерогенним.

До складених визначуваних типів належать рядковий, індексований, іменований і множинний типи.

Рядковий тип

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

Мультизначення рядкового типу утворюється зі значень символьного типу і тому є гомогенним. Мультизначення можна подати ланцюжком символів, довжина якого зазначається при описі типу. Самовиражене мультизначення рядкового типу є рядковим літералом, або рядком (string).

Представлення рядків

Існує три види представлень значень рядків рядкового типу:

  1. із статичною довжиною (довжина рядка зазначена в ньому ж кількістю символів, заданих при описі; використовується в мовах Fortran, Cobol, Pascal, Ada);

  2. з обмеженою динамічною довжиною (довжина рядка зазначається в ньому ж спеціальним символом, зазвичай Ø; використовується в мовах С, С++);

  3. із динамічною довжиною (довжина рядка не зазначається, пам'ять захоплюється та вивільняється динамічно; використовується в мовах програмування Snobol, Perl).

Представлення рядкового літерала в мові Pascal

У мові Pascal довжина рядка зазвичай обмежується 255 символами. Це пов'язано з тим, що довжина мультизначення зберігається в ньому ж, у першому байті, представлення із статистичною довжиною, а максимальне значення, яке можна зберігати в байті пам’яті є 255.

У мові Pascal для опису рядкового типу використовується зарезервований ідентифікатор string, а кількість складових мультизначення вказується в символах ”[ та ”]”.

type

My = string[10];

var

myString : my;

cLit : char;

begin

myString := 'Name';

cLit := myString [1]; // cLit := MyString; cLit := ‘tt’;

myString := myString +'1';

// myString[0] = #5 myString = 'Name1'

myString := myString[0] +'1';

// myString[0] = #2 myString = #5’1’

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]