
- •Підпрограма. Визначення. 1
- •Підпрограма. Визначення. 2
- •Застосування підпрограм
- •Відкриті та закриті підпрограми
- •Закриті підпрограми. 1
- •Закриті підпрограми. 2
- •Процедурна абстракція
- •Абстракція управління
- •Оболонка підпрограмної капсули. Параметри підпрограми
- •Параметри закритої підпрограми. 1
- •Параметри закритої підпрограми. 2
- •Параметри закритої підпрограми. 3
- •Параметри закритої підпрограми. 4
- •Параметри закритої підпрограми. 5
- •Параметри закритої підпрограми. 6
- •Локальні об'єкти підпрограм. 1
- •Локальні об'єкти підпрограм. 2
- •Глобальні об'єкти підпрограм
- •Правило хорошого стилю програмування
- •Відмінності між параметрами та локальними об’єктами підпрограми. 1
- •Відмінності між параметрами та локальними об’єктами підпрограми. 2
- •Прототип підпрограми
- •Способи передачі значень параметрів підпрограми. 1
- •Способи передачі значень параметрів підпрограми. 2
- •Передавання значення вмісту. 1
- •Передавання значення вмісту. 2
- •Передавання значення вмісту. 3
- •Передавання імені. 3
- •Приклад застосування різних способів передачі параметрів
- •Передача значення
- •Передача посилання
- •Передача імені
- •Процедури
- •Функції
- •Абстрактний тип даних. 1
- •Абстрактний тип даних. 2
- •Операції абстрактних типів даних
- •Склад абстрактного типу даних
- •Процедурний тип
- •Процедурний тип. Приклад
- •Вказівник на функцію
- •Алгоритм читання оператора опису
- •Приклади читання оператора опису
- •Вказівник на функцію. Приклад
Вказівник на функцію
У мові С для побудови абстрактних типів даних використовується вказівник на функцію. При цьому читання опису об'єкта в С ускладнюється. У загальному випадку опис об'єкта – це ідентифікатор (позначення об'єкта), доповнений різними ознаками, модифікаторами та позначеннями типу. Для читання опису використовують певний алгоритм.
Алгоритм читання оператора опису
знайти позначення об'єкта (ідентифікатор);
перевірити, чи є праворуч від позначення дужки () або [];
якщо є, то читати опис зліва на право, а якщо ні, то читати опис справа на ліво;
перевірити, чи є ліворуч від позначення символ *;
якщо є, то читати опис справа на ліво;
якщо є дужки, як у виразі, то спочатку читати всередині дужок;
наприкінці читати позначення типу.
Приклади читання оператора опису
int nA; - опис змінної цілого типа;
int| *pnA; - опис вказівної змінної цілого типу;
int| *pnA[5] - опис масивів вказівників з п'яти елементів цілого типу;
int| (*pnA|)[5] - опис вказівника на масиви з п'яти елементів;
int| *pf() - опис функції без параметрів, яка повертає вказівник на значення цілого типу;
void(*pj)() - опис вказівника на процедуру без параметрів;
int (*p())[3] - опис функції, яка повертає вказівник на масив із трьох елементів цілого типу.
Вказівник на функцію. Приклад
struct StackRec{
int m_s[128];
int m_sp;
void (*m_Push) (StackRec*,int);
int (*m_Pop) (StackRec*);
void (*m_Init) (StackRec*);
};
void Push(StackRec *Stack, int nMes)
{
Stack->m_s[Stack->m_sp] = nMes;
Stack->m_sp ++;
}
int Pop(StackRec *Stack)
{
int nTemp;
nTemp = Stack->m_s[Stack->m_sp];
Stack->m_sp --;
return nTemp;
}
void Init(StackRec *Stack)
{
Stack->m_sp = 0;
}
void main()
{
StackRec *pStack;
pStack = new StackRec;
pStack->m_Push = Push;
pStack->m_Pop = Pop;
pStack->m_Init = Init;
pStack->m_Init(pStack);
pStack->m_Push(pStack, 22);
pStack->m_Push(pStack, 33);
}