logo
ООП для Заоч / Пинчук Лозовская Программир на С

Void strcpy(char* s1, char* s2)

{ while (*s1++ = *s2++);

}

Зверніть увагу на те, що рядок-джерело і рядок-призначення передаються у функцію за допомогою покажчиків. Це є основний спосіб передачи масиву у функцію.

Крім поняття покажчик на об’єкт, існує й таке поняття, як покажчик на функцію. Робота з такими покажчиками буде розглянута пізніше, у главі, присвяченій функціям.

Типовими помилками при використанні покажчиків є:

- запис операцій з невизначеними (не ініціалізованими) покажчиками;

- втрата адреси динамічного об'єкта при виході з блоку.

У прикладі, наведеному нижче, виконується операція з невизначеним покажчиком, що є грубою помилкою:

float* p;

*p = 12.5;

Після виконання першого рядка буде створений покажчик, який залишається не ініціалізованим. Це означає, що його значення буде випадковим. Виконання другого рядка приведе до запису числового значення типу double (8 байт) по випадковій адресі. У більшості випадків після запуску програми це приводить до одержання повідомлення про помилку періоду виконання, яке генерується операційною системою. Воно може виглядати так:

Thread stopped

C:\users\VP\lab_05.exe:

Fault: access violation at 0x402307

write of address 0x0

Ще один приклад з помилкою:

char s = "Borland Builder 6.0";

s = "Intel";

Після виконання другого рядка область пам'яті, у якій зберігається рядок "Borland Builder 6.0" буде загублена назавжди, бо адреса цього рядка ніяким чином не зберігається.

Нагадаємо ще раз, що покажчик у більшості випадків є типізований. Тип значення покажчика при необхідності можна перетворити за допомогою унарної операції перетворення типу. Роль символу такої операції грає запис виду (тип*) , де тип - тип, до якого приводиться значення покажчика. Використання цієї операції вимагає деякої обережності. У більшості випадків, така операція використовується для перетворення типізованої адреси у не типізовану або навпаки.

При оголошенні не типізованого покажчика використовується службове слово void. Наприклад: