- •Елементи мови с.Основні символи
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Лексеми
- •Коментарі
- •Умовні оператори. Логічні вирази
- •Форми оператора if
- •Оператор вибору switch
- •Перерахування типів
- •Перетворення типів
- •Оператори циклу
- •Оператор while
- •Оператор for
- •Оператор do-while
- •Оператори переходу
- •Cтруктури
- •Об'єднання (суміші)
- •Робота з структурами.
- •Ініціалізація структур
- •Робота з обєднаннями
- •Визначення об'єктів та типів
- •Методи доступу до елементів масивів
- •Покажчики на багатовимірні масиви
- •Операції з вказівниками
- •Робота з покажчиками.
- •Покажчики на структуру
- •Масиви структур
- •Динамічне розміщення масивів
- •Робота з динамічними масивами
- •Робота з непрямою адресацією
- •Робота з покажчиками як параметрами функцій
- •Використання вказівників
- •Операції з вказівниками
- •Використання вказівників в програмі
- •Робота з файлами
- •Відкриття файлу
- •Обробка відкритого файлу
- •Перевірка ознаки кінця файлу
- •Закриття файлу
- •Функції введення-виведення
- •Робота з текстовими файлами
- •Функція форматованого виведення printf ()
- •Основні формати
- •Модифікації форматів
- •Функція форматованого введення scanf ()
- •Робота функції scanf ()
- •Призначеня функцій бібліотеки введення-виведення
- •Макрокоманди
- •Потокові інтерфейси введення-виведення
- •Ближні покажчики (near)
- •Дальні покажчики (far)
- •Покажчики huge
- •Функції для роботи з рядками
- •Динамічні рядки, клас string
- •Визначення поточної робочої директорії
- •Визначення поточного каталогу диска
- •Визначення / встановленн поточного диска
- •Пошук файлу
- •Створення, видалення, зміна директорій
- •Приклад програми для роботи з директоріями
- •Перегляд каталогу диска
- •Параметри структури ffblk
- •Робота з клавіатурою
- •Робота з файлами
- •Послідовний доступ до елементів двійкових файлів
- •Організація довільного доступу до елементів двійкових файлів
- •Робота динамічних структур даних.
- •Функції управління пам'яттю
- •Атрибути файлів.
- •Параметри
- •Динамічні структури даніх
- •Лінійні списки
- •Стек. Загальні поняття.
- •Приклад використання стеку
- •Основні визначення
- •Приклад використання дерев
Операції з вказівниками
Над покажчиками можна виконувати унарні операції: інкремент і декремент. При виконанні операцій + + і - значення покажчика збільшується або зменшується на довжину типу, на який посилається використовуваний покажчик.
Приклад:
int * ptr, a [10];
ptr = & a [5];
ptr + +; / * одно адресою елемента a [6] * /
ptr -; / * одно адресою елемента a [5] * /
В бінарних операціях додавання і віднімання можуть брати участь покажчик і величина типу int. При цьому результатом операції буде покажчик на вихідний тип, а його значення буде на вказане число елементів більше або менше вихідного.
Приклад:
int * ptr1, * ptr2, a [10];
int i = 2;
ptr1 = a + (i +4); / * одно адресою елемента a [6] * /
ptr2 = ptr1-i; / * одно адресою елемента a [4] * /
В операції віднімання можуть брати участь два покажчика на один і той же тип. Результат такої операції має тип int і дорівнює числу елементів вихідного типу між зменшуваним і вичитав, причому якщо перша адреса молодше, то результат має негативне значення.
Приклад:
int * ptr1, * ptr2, a [10];
int i;
ptr1 = a +4;
ptr2 = a +9;
i = ptr1-ptr2; / * дорівнює 5 * /
i = ptr2-ptr1; / * одно -5 * /
Значення двох покажчиків на однакові типи можна порівнювати в операціях ==,! =, <, <=,>,> = При цьому значення покажчиків розглядаються просто як цілі числа, а результат порівняння дорівнює 0 (брехня) або 1 (істина).
Приклад:
int * ptr1, * ptr2, a [10];
ptr1 = a +5;
ptr2 = a +7;
if (prt1> ptr2) a [3] = 4;
У даному прикладі значення ptr1 менше значення ptr2 і тому оператор a [3] = 4 не буде виконаний.
Питання для контролю:
1. Які є методи доступу до елементів масиву?
2. Що таке покажчики на багатовимірні масиви?
3. Які є операції з вказівниками?
Література:
1. Прата С. Язык программирования С++. Лекции и упражнения. Учебник: Пер. с англ. –СПб.: ДиаСофтЮП, 2003, с. 126-130
Урок №63
(згідно робочої навчальної програми)
Тема:Нульові покажчики, покажчики типу void, покажчики і динамічні змінні.
Питання:
1.Робота з покажчиками.
Робота з покажчиками.
У мові С елементи масивів можуть мати будь-який тип, і, зокрема, можуть бути покажчиками на будь-який тип. Розглянемо кілька прикладів з використанням покажчиків.
Наступні оголошення змінних
int a [] = {10,11,12,13,14,};
int * p [] = {a, a +1, a +2, a +2, a +3, a +4};
int ** pp = p;
При виконанні операції pp-p отримаємо нульове значення, так як посилання pp і p дорівнюють і вказують на початковий елемент масиву покажчиків, пов'язаного з покажчиком p (на елемент p [0]).
Результатом виконання віднімання pp-p буде 2, оскільки значення pp є адреса третього елемента масиву p. Посилання * pp-a теж дає значення 2, так як звернення * pp є адреса третього елемента масиву a, а звернення a є адреса початкового елемента масиву a. При зверненні за допомогою посилання ** pp отримаємо 12 - це значення третього елемента масиву a. Посилання * pp + + дасть значення четвертого елемента масиву p тобто адресу четвертого елемента масиву a.
Якщо вважати, що pp = p, то звернення * + + pp це значення першого елемента масиву a (тобто значення 11), операція + + * pp змінить вміст покажчика p [0], таким чином, що він стане рівним значенню адреси елемента a [1].
Складні звернення розкриваються зсередини. Наприклад звернення * (+ + (* pp)) можна розбити на наступні дії: * pp дає значення початкового елемента масиву p [0], далі це значення інкременіруется + + (* p) у результаті чого покажчик p [0] стане дорівнює значенню адреси елемента a [1], і остання дія це вибірка значення за отриманим адресою, тобто значення 11.
У попередніх прикладах був використаний одновимірний масив, розглянемо тепер приклад з багатовимірним масивом і покажчиками. Наступні оголошення змінних
int a [3] [3] = {{11,12,13},
{21,22,23},
{31,32,33}};
int * pa [3] = {a, a [1], a [2]};
int * p = a [0];
Відповідно до цієї схеми доступ до елемента a [0] [0] отримати за вказівниками a, p, pa за допомогою наступних посилань: a [0] [0], * a, ** a [0], * p, ** pa , * p [0].
Розглянемо тепер приклад з використанням рядків символів. Оголошення змінних
char * c [] = {"abs", "dx", "yes", "no"};
char ** cp [] = {c +3, c +2, c +1, c};
char *** cpp = cp;
Питання для контролю:
1. Який тип можуть мати покажчики?
2. Як оголосити вказівник на масив?
3. Як оголосити вказівник на рядок?
Література:
1.Шилдт Г.: Пер. с англ. –М.: Издательский дом “Вильямс”, 2002. –704с. –стор 130-132
Урок №26
(згідно робочої навчальної програми)
Тема: Покажчики і структури даних, покажчики і масиви
Питання:
1. Покажчики на структуру
2. Масиви структур
