- •Елементи мови с.Основні символи
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Лексеми
- •Коментарі
- •Умовні оператори. Логічні вирази
- •Форми оператора if
- •Оператор вибору switch
- •Перерахування типів
- •Перетворення типів
- •Оператори циклу
- •Оператор while
- •Оператор for
- •Оператор do-while
- •Оператори переходу
- •Cтруктури
- •Об'єднання (суміші)
- •Робота з структурами.
- •Ініціалізація структур
- •Робота з обєднаннями
- •Визначення об'єктів та типів
- •Методи доступу до елементів масивів
- •Покажчики на багатовимірні масиви
- •Операції з вказівниками
- •Робота з покажчиками.
- •Покажчики на структуру
- •Масиви структур
- •Динамічне розміщення масивів
- •Робота з динамічними масивами
- •Робота з непрямою адресацією
- •Робота з покажчиками як параметрами функцій
- •Використання вказівників
- •Операції з вказівниками
- •Використання вказівників в програмі
- •Робота з файлами
- •Відкриття файлу
- •Обробка відкритого файлу
- •Перевірка ознаки кінця файлу
- •Закриття файлу
- •Функції введення-виведення
- •Робота з текстовими файлами
- •Функція форматованого виведення printf ()
- •Основні формати
- •Модифікації форматів
- •Функція форматованого введення scanf ()
- •Робота функції scanf ()
- •Призначеня функцій бібліотеки введення-виведення
- •Макрокоманди
- •Потокові інтерфейси введення-виведення
- •Ближні покажчики (near)
- •Дальні покажчики (far)
- •Покажчики huge
- •Функції для роботи з рядками
- •Динамічні рядки, клас string
- •Визначення поточної робочої директорії
- •Визначення поточного каталогу диска
- •Визначення / встановленн поточного диска
- •Пошук файлу
- •Створення, видалення, зміна директорій
- •Приклад програми для роботи з директоріями
- •Перегляд каталогу диска
- •Параметри структури ffblk
- •Робота з клавіатурою
- •Робота з файлами
- •Послідовний доступ до елементів двійкових файлів
- •Організація довільного доступу до елементів двійкових файлів
- •Робота динамічних структур даних.
- •Функції управління пам'яттю
- •Атрибути файлів.
- •Параметри
- •Динамічні структури даніх
- •Лінійні списки
- •Стек. Загальні поняття.
- •Приклад використання стеку
- •Основні визначення
- •Приклад використання дерев
Визначення об'єктів та типів
Як вже говорилося вище, всі змінні використовувані в програмах на мові СІ, повинні бути оголошені. Тип оголошуваної змінної залежить від того, яке ключове слово використовується в якості специфікатора типу і чи є описувач простим ідентифікатором або ж комбінацією ідентифікатора з модифікатором покажчика (зірочка), масиву (квадратні дужки) або функції (круглі дужки).
При оголошенні простий змінної, структури, суміші або об'єднання, а також перерахування, описувач - це простий ідентифікатор. Для оголошення покажчика, масиву або функції ідентифікатор модифікується відповідним чином: зірочкою зліва, квадратними або круглими дужками праворуч.
Відзначимо важливу особливість мови СІ, при оголошенні можна використовувати одночасно більше одного модифікатора, що дає можливість створювати безліч різних складних описувачів типів.
Однак треба пам'ятати, що деякі комбінації модифікаторів неприпустимі:
- Елементами масивів не можуть бути функції,
- Функції не можуть повертати масиви або функції.
При ініціалізації складних описувачів квадратні і круглі дужки (праворуч від ідентифікатора) мають пріоритет перед зірочкою (зліва від ідентифікатора). Квадратні або круглі дужки мають один і той же пріоритет і розкриваються зліва направо. Специфікатор типу розглядається на останньому кроці, коли описувач вже повністю проінтерпретований. Можна використовувати круглі дужки, щоб поміняти порядок інтерпретації на необхідний.
Для інтерпретації складних описів пропонується просте правило, яке звучить як "зсередини назовні", і складається з чотирьох кроків.
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. Операції з вказівниками
