Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Samostoyatelnye_po_S.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
672 Кб
Скачать
☆

Визначення об'єктів та типів

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

При оголошенні простий змінної, структури, суміші або об'єднання, а також перерахування, описувач - це простий ідентифікатор. Для оголошення покажчика, масиву або функції ідентифікатор модифікується відповідним чином: зірочкою зліва, квадратними або круглими дужками праворуч.

Відзначимо важливу особливість мови СІ, при оголошенні можна використовувати одночасно більше одного модифікатора, що дає можливість створювати безліч різних складних описувачів типів.

Однак треба пам'ятати, що деякі комбінації модифікаторів неприпустимі:

- Елементами масивів не можуть бути функції,

- Функції не можуть повертати масиви або функції.

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

Для інтерпретації складних описів пропонується просте правило, яке звучить як "зсередини назовні", і складається з чотирьох кроків.

1. Почати з ідентифікатора і подивитися вправо, чи є квадратні або круглі дужки.

2. Якщо вони є, то проінтерпретувати цю частину описувача і потім подивитися ліворуч в пошуку зірочки.

3. Якщо на будь-якій стадії справа зустрінеться закриває кругла дужка, то спочатку необхідно застосувати всі ці правила усередині круглих дужок, а потім продовжити інтерпретацію.

4. Інтерпретувати специфікатор типу.

Приклади:

int * (* comp [10]) ();

6 5 3 1 2 4

У даному прикладі оголошується змінна comp (1), як масив з десяти (2) покажчиків (3) на функції (4), що повертають покажчики (5) на цілі значення (6).

char * (* (* var) ()) [10];

7 6 4 2 1 3 5

Змінна var (1) оголошена як покажчик (2) на функцію (3) повертаючу покажчик (4) на масив (5) з 10 елементів, які є покажчиками (6) на значення типу char.

Крім оголошень змінних різних типів, є можливість оголосити типи. Це можна зробити двома способами. Перший спосіб - вказати ім'я тега при оголошенні структури, об'єднання або перерахування, а потім використовувати це ім'я в оголошенні змінних і функцій в якості посилання на цей тег. Другий - використовувати для оголошення типу ключове слово typedef.

При оголошенні з ключовим словом typedef, ідентифікатор стоїть на місці описуваного об'єкта, є ім'ям вводиться в розгляд типу даних, і далі цей тип може бути використаний для оголошення змінних.

Відзначимо, що будь-який тип може бути оголошений з використанням ключового слова typedef, включаючи типи покажчика, функції або масиву. Ім'я з ключовим словом typedef для типів покажчика, структури, об'єднання може бути оголошено перш ніж ці типи будуть визначені, але в межах видимості рекламатора.

Приклади:

typedef double (* MATH) ();

/ * MATH - нове ім'я типу, що представляє покажчик на

функцію, що повертає значення типу double * /

MATH cos;

/ * Cos покажчик на функцію, що повертає

значення типу double * /

/ * Можна провести еквівалентне оголошення * /

double (* cos) ();

typedef char FIO [40]

/ * FIO - масив із сорока символів * /

FIO person;

/ * Змінна person - масив із сорока символів * /

/ * Це еквівалентно оголошенню * /

char person [40];

При оголошенні змінних і типів тут були використані імена типів (MATH FIO). Крім цього, імена типів можуть ще використовуватися в трьох випадках: у списку формальних параметрів, в оголошенні функцій, в операціях приведення типів і в операції sizeof (операція приведення типу).

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

специфікатор-типу абстрактний-описувач;

Абстрактний-описувач - це описувач без ідентифікатора, що складається з одного або більше модифікаторів покажчика, масиву або функції. Модифікатор покажчика (*) завжди задається перед ідентифікатором в описувач, а модифікатори масиву [] та функції () - після нього. Таким чином, щоб правильно інтерпретувати абстрактний описувач, потрібно почати інтерпретацію з подразумеваемого ідентифікатора.

Абстрактні описувачі можуть бути складними. Дужки у складних абстрактних описувач задають порядок інтерпретації подібно до того, як це робилося при інтерпретації складних описувачів в оголошеннях.

Питання для контролю:

1. Який синтаксис має об’єднання ?

2. Яким чином визначаються об’єкти?

3. Що таке абстрактний описувач?

Література:

1.Шилдт Г.: Пер. с англ. –М.: Издательский дом “Вильямс”, 2002. –704с. –стор 183-195

Урок №21

(згідно робочої навчальної програми)

Тема: Оголошення і розіменування покажчиків, покажчики як псевдоніми, покажчики і перевірка типів

Питання:

1. Методи доступу до елементів масивів.

2. Покажчики на багатовимірні масиви

3. Операції з вказівниками

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