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

Особливості індексованого типу в мові с.1

У мові С позначення об'єкту індексованого типу є позначенням вказівної типізованої змінної, розіменований вміст якої вказує на нульовий компонент мультизначення.

Наприклад:

const int MAX = 3;

int nArr[max];

Особливості індексованого типу в мові с.2

Тому можливо записати наступне:

int *pnArr ≡ nArr; де ≡ - символ тотожності

int * pnArr ≡ &nArr[0];

*(pnArr + indexer) ≡ nArr[indexer];

*(nArr + indexer) ≡ pnArr[indexer];

pnArr ≡ &nArr[0];

*pnArr ≡ nArr[0];

Отже, у мові С обробка значень індексованого типу грунтується на адресній арифметиці:

nArr[2] ≡ (nArr+2);

Іменовані (комбіновані) типи

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

Щоб описати значення комбінованого типу, необхідно описати тип значення кожного компонента (поля) і поставити їм у відповідність позначення, унікальні в контексті даного опису. Таке позначення називається покажчиком поля, або селектором. Для представлення селектора використовується ідентифікатор. Селектор набуває сенсу тільки в поєднанні з позначенням об'єкту, що має значення іменованого типу.

Механізм обробки значень іменованого типу

Характерний для іменованого типу є те, що зв'язок

"позначення об’єкта – селектор – значення компонента"

установлюється під час компіляції, тоді як зв'язок

"позначення об'єкта – значення індексатора – значення компонента мультизначення індексованого типу",

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

Відмінності в застосуванні іменованого та індексованого типів

Вибір типу (іменований або індексований) для застосування в програмі визначається:

  • ефективністю – компоненти значень іменованого типу не завжди в пам'яті розміщуються впритул на відміну від індексованого типу;

  • гнучкістю – зв'язок із компонентом індексованого типу зазвичай обчислюється динамічно під час виконання програми;

  • зручністю – в значенні іменованого типу можна зібрати скільки завгодно компонентів, але всі необхідно навести в описі типу, наділивши унікальними селекторами.

Опис та застосування іменованого типу

Pascal:

type

my = record

m_sSurname : string [40];

m_c Gender : char;

m_nAge : integer;

end;

var

my_Mаn : my;

Зображення значень іменованого типу здійснюються з використанням зображень значень типів, які утворюють мультизначення, наприклад для типу my : {“Іванов”, ‘M', 17}

Застосування іменованого типу. 1

Для значень іменованого типу дозволено застосовувати оператор присвоювання двох сумісних об'єктів. Доступ до компонентів мультизначення здійснюється шляхом використання позначення об'єкта (змінної) та позначення відповідного селектора.

Pascal:

var

my_Mаn : my;

my_Women : my;

begin

my_Mаn := my_Women;

Застосування іменованого типу. 2

Pascal:

my_Women.m_sSurname := 'Петрова';

my_Women.m_c Gender := 'W';

my_Women.m_nAge := 38;

или

with my_Women do

begin

m_sSurname := 'Петрова';

m_c Gender := 'W';

m_nAge := 38;

end;

Застосування іменованого типу. 3

С:

struct my{

char *m_sSurname;

char m_c Gender;

int m_nAge;

}

my my_Women;

my_Women.m_sSurname = “Петрова”;

my_Women.m_c Gender = 'W';

my_Women.m_nAge = 38;

Ініціалізація об’єктів іменованого типу

Ініціалізація об'єктів іменованого типу може відбуватися як при описі об'єкта, так і шляхом застосування оператора присвоювання.

Для ініціалізації при описі в мові Pascal використовується список пар, які утворюються позначенням селектора та R-виразом.

Наприклад, m_sSurname : 'Петрова'; m_c Gender := 'W'

Для ініціалізації в мові С застосовується список R – виразів.

Наприклад, 'Петрова', 'W'

Порядок позначення у списку ініціалізації позиційний, тобто має відповідати порядку опису компонентів в описі типу.

Pascal:

type

point = record

m_Jx: real;

m_Jy: real;

end;

const

my_Point1 : point = (m_Jx: 1.1; m_Jy: 1.2);

var

my_Point2 : point;

begin

my_Point2.m_Jx := 10.2;

my_Point2.m_Jy := 15.5;

С:

struct point{

float m_Jx;

float m_Jy;

}

void main()

{

point my_Point1 = {1.1, 1.2};

point my_Point2;

my_Point2.m_Jx = 10.2;

my_Point2.m_Jy = 15.5;

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