русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Покажчики


Дата додавання: 2014-11-28; переглядів: 894.


 

Покажчиком (pointer) називають змінну, яка приймає значення, що є адресою деякого об'єкта. Покажчики можуть бути типізованими й не типізованими. Найчастіше зустрічаються типізовані покажчики. Приклад оголошення типізованого покажчика для роботи з об'єктами типу float:

float* pf;

Еквівалентний запис цього оголошення виглядає так:

float *pf;

Останній варіант зручніше, якщо оголошується одразу декілька покажчиків:

float *p, *q, *h;

Покажчику pf можна привласнити адресу будь-якого об'єкта, що має тип float. Відзначимо, що типізованим є не тільки сам покажчик, але і його значення - адреса.

Унарна операція * , що діє на покажчик, повертає посилання на об'єкт (значення Lvalue), адреса якого відповідає значенню покажчика. У наступному прикладі

float a = 5;

float* p = &a;

*p = *p/2;

Тут *p є посилання на об’єкт, яким є змінна a, а останній оператор діє так само, як оператор

a = a/2;

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

Арифметика покажчиків

Арифметичні операції над покажчиками (адресами) виконуються за особливими правилами - правилам адресної арифметики. Нехай p - типізований покажчик, k - змінна цілого типу. Тоді значенням виразу

p+k

є значення адреси, збільшеної на розмір k об'єктів того типу, який відповідає покажчику p. Тобто така операція повертає адресу, зсунуту на k об'єктів уперед відносно значення p. У наступному прикладі

double *p, *q = &x;

p= q+5;

значенням покажчика p буде значення покажчика q, збільшене на 5*8=40 байтів.

Операція виду

p+1

повертає адресу того об'єкта, що є наступним після об'єкта з адресою p.

Операція виду p++ збільшує значення покажчика p на розмір одного об'єкта відповідного типу, тобто вона діє також, як оператор p = p+1.

Операції - (віднімання) і -- (декрементування) діють аналогічним чином, але адреса змінюється у бік зменшення.

Визначеною є також операція віднімання для покажчиків або адрес. Нехай p1 та p2 є покажчики на об’єкт деякого типу. Тоді результатом виконання операції

P2 - p1

буде відстань від об’єкту з адресою p1 до об’єкту з адресою p2 у просторі пам’яті, яка повертається як кількість об’єктів. Наприклад, при виконанні такого програмного коду:


<== попередня лекція | наступна лекція ==>
Void main() | Void main()


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн