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

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

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

Приклад:

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. Масиви структур

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