Покажчики та посилання ⇐ ПредыдущаяСтр 2 из 2
Поняття покажчика. Покажчик - це змінна, значенням якої є адреса області пам'яті, в якій зберігається інший об’єкт (елемент даних). Зв'язок об’єкта з покажчиком, який вказує на цей елемент, схематично можна представити таким чином: покажчик елемент даних адреса· Формат задання адреси: базис сегмента : зсув, де базис сегмента – 16-ве число, що визначає адресу початку сегмента ОП (номер 16-байтового блоку, з якого починається сегмент; кратний 16); зсув – 16-ве число, що визначає зміщення потрібного байта пам'яті відносно початку сегмента. Наприклад, 000А:001А. Такий спосіб запису адреси пов'язаний з тим, що в операційній системі DOS вся пам'ять розбита на сегменти, розміри яких не перевищують 64 Кбайт. Для отримання абсолютної адреси система додає до базису сегмента справа шістнадцятковий нуль (це чотири нулі в двійковій системі), а потім складає його зі зміщенням. Таким способом можна адресувати 1 Мбайт пам'яті. Для зберігання значення покажчика (адреси) необхідно 4 байти ОП: 2 байти – для базису сегмента, 2 байти – для значення зсуву. У мові С/С++ формат оголошення покажчиків має наступний вигляд: базовий тип *покажчик; Наприклад, int *p, number; float *ptr, *r; ¨¨¨ Кожен покажчик повинен бути оголошений своїм символом *. Ініціалізація покажчиків у С/С++ здійснюється з використанням операції отримання адреси & при визначенні покажчика або за допомогою оператора присвоєння. Наприклад,
Покажчик може отримати в якості початкового значення також пусте посилання null. Макрос null, що є константним нуль-покажчиком, визначений в заголовочних файлах stdlib.h, stddef.h та ін. Звертання до відповідного значення здійснюється по формату: *покажчик. Наприклад, int n, *p; n = 7; *p = 9; cout << “n: “ << n << endl; cout << “*p: “ << *p << endl; Дії над покажчиками. Над покажчиками не визначені які-небудь операції, які б давали результат цього ж типу. І це зрозуміло — адже значеннями покажчиків є адреси тих або інших програмних об'єктів в пам'яті комп’ютера. А оскільки мова програмування високого рівня не містить яких-небудь правил щодо розміщення таких об'єктів в пам'яті комп’ютера (це питання вирішується самим транслятором), то неможливо сформулювати які-небудь розумні правила (операції), за допомогою яких в програмі можна було б визначити адресу одного об'єкту за адресами інших об'єктів. Тому над покажчиками визначені лише операція присвоєння і деякі операції порівняння. Для присвоєння значення покажчику використовується оператор присвоєння наступного формату: покажчик := посилальний вираз; де посилальний вираз задає посилальне значення того ж типу, що і покажчик (посилається на програмні об'єкти того ж типу). При цьому як посилальний вираз може використовуватися: - покажчик; - функція, значенням якої є покажчик; - порожній покажчик (nil, null). Над покажчиками визначено дві операції порівняння: = (дорівнює) і ≠ (не дорівнює). Оскільки машинні адреси по суті справи є цілими числами, то над покажчиками можна було б визначити і інші операції порівняння (<, £, >, ³), але у цьому немає необхідності, оскільки при формулюванні алгоритму нема сенсу використовувати інформацію про те, який з двох програмних об'єктів розташований ближче до початку (кінця) пам'яті, а який далі. Два покажчика вважаються рівними, якщо вони обидва є порожніми посиланнями або вказують на один і той же об'єкт — у всіх останніх випадках має місце нерівність покажчиків. У мові С/С++ можна виводити адреси комірок пам’яті. Відповідні значення виводяться у 16-му вигляді. Наприклад, #include <iostream.h> main( ) { int n, *nPtr; n = 7; nPtr = &n; cout<<“Адреса n:“<<&n<<endl<<“Значення nPtr:“<<nPtr<<endl; cout<<“Значення n:“<<&n<<endl<<“Значення *nPtr:“<<*nPtr<<endl; } Посилання. Посилання – це псевдонім (інше ім’я) змінної. Для нього не резервується місце в ОП. Формат оголошення псевдоніма: базовий тип &псевдонім. Кожен псевдонім повинен бути оголошений своїм символом &. Посилання повинно бути ініціалізоване при його оголошенні. Наприклад, int n = 5; int &p = n, x = 3, &y = x; Як тільки посилання оголошується як псевдонім іншої змінної, всі операції, що виконуються із посиланням, насправді виконуються із самою змінною. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|