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

Робота з покажчиками як параметрами функцій

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

Функція getint повинна повертати або знайдене значення, або ознака кінця файлу, якщо вхідні дані цілком вичерпані. Ці значення повинні повертатися як окремі об'єкти, яке б значення ні використовувалося для EOF, навіть якщо це значення цілого, що вводиться. Наступний цикл заповнює масив цілими за допомогою звертань до функції getint:

int n, v, array[size];

for (n = 0; n < size && getint(&v) != EOF; n++)

array[n] = v;

У результаті кожного звертання v стає рівним наступному цілому значенню, знайденому у вхідних даних. Зверніть увагу, що як аргумент getint необхідно вказати &v а не v. Використання просте v швидше за все приведе до помилки адресації, оскільки getint думає, що вона працює саме з покажчиком.

    Сама getint є очевидною модифікацією написаної нами раніше функції atoi:

getint(pn) /* get next integer from input */

int *pn;

{

int c,sign;

while ((c = getch()) == ' ' || c == '\n'

|| c == '\t'); /* skip white space */

sign = 1;

if (c == '+' || c == '-') { /* record sign */

sign = (c == '+') ? 1 : -1;

c = getch();

}

for (*pn = 0; c >= '0' && c <= '9'; c = getch())

*pn = 10 * *pn + c - '0';

*pn *= sign;

if (c != EOF)

ungetch(c);

return(c);

}

Вираз *pn використовується всюди в getint як звичайна змінна типу int. Ми також використовували функції getch і ungetch, так що один зайвий символ, який приходиться зчитувати, може бути поміщений назад у введення.

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

1. В якому випадку покажчики використовуться як аргументи функцій?

2. Що таке аргумент функції?

3.Як здійснється робота з покажчиками, які передаться як параметри функції?

Література:

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

Урок №32

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

Тема: Покажчики як результати роботи функції, покажчики на функції

Питання:

1.Використання вказівників

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

Використання вказівників

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

printf("%d %p \n", pooh, &pooh); Оголошення вказівників

int * pi;

char * рс;

float *pf, *pq;

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

Існує п'ять основних операцій, що можна виконувати по відношенню до змінних вказівників:

1 . присвоювання - вказівнику можна присвоїти адресу, завдяки оператору &;

2. Знаходження значення. Оператор * видає значення, що зберігається у вказаній комірці;

3. отримання адреси вказівника;

4. збільшення вказівника на 1. Збільшення вказівника на значення елементу масиву заставляє його зміститися до наступного елементу масиву. Наприклад, ptr++ збільшує числове значення ptraa чотири (чотири байта для значень типу int) і призводить до того, що він вказує на елемент масиву

5. Віднімання. Можливо обчислювати різницю між двома вказівниками. Звичайно, ця операція використовується для двох вказівників на елементи одного й того самого масиву для виявлення відстані між елементам

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

1. Що таке вказівник?

2. Де можна застосувати вказівники?

3. Які є операції з вказівниками?

Література:

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

Урок №35

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

Тема: Використання покажчиків

Питання:

1.Використання вказівників в програмі

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