|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Загальні відомості про вказівникиТеоретичні основи Кожна змінна в програмі – це об’єкт, що має ім’я і значення. З точки зору машинної реалізації ім’я змінної відповідає адресі тієї ділянки пам’яті, яка виділена цій змінній, а значення змінної – умісту цієї ділянки пам’яті. Щоб отримати адресу, у мові C++ використовують унарну операцію &. Таким чином, якщо змінна має ім’я v, то її адресою є &v. Операція & може застосовуватися тільки до об’єктів, які мають ім’я і розміщені в пам’яті. Вона не застосовується до констант, виразів, бітових полів структур, регістрових змінних, файлів. Для зберігання адрес використовують змінні спеціального типу – «вказівники». При цьому значенням вказівника є адреса змінної конкретного типу, і не можна у вказівниках одного типу зберігати адреси змінних іншого типу. При описанні або визначенні вказівника найпростішим є використання такого формату: тип *ім’я змінної; Наприклад: char *ch; Тут символ * – це операція розіменування, яка застосовується до адреси. Результатом цієї операції є об’єкт, на який указує вказівник. Таким чином, *n1 – це змінна типу int, а n1 – адреса, за якою зберігається значення типу int. Зі сказаного раніше випливає, що оператор n1 = n2; є коректним, а оператор n1 = ch; некоректний, оскільки в останньому випадку типи лівої і правої частин не співпадають, і для виконання оператора треба застосувати операцію перетворення типу: n1 = (int*) ch; У C++ визначений тип void, якому відповідає відсутність значення. Не можна оголосити змінну типу void, але вказівник на тип void визначити можна, і такому вказівнику без додаткового перетворення можна присвоїти вказівник на будь-який тип (але не навпаки – у цьому випадку треба перетворювати тип). У заголовковому файлі stdio.h, а також у деяких інших заголовкових файлах визначена константа NULL, яка позначає посилання на неіснуючу адресу (умовне нульове значення вказівника). Це значення без перетворення типу можна записувати в будь-який вказівник. Якщо при визначенні вказівника не здійснювалася його ініціалізація, то він не може використовуватися у виразах, в операторі присвоювання і функціях уведення даних. Тому рекомендується здійснювати ініціалізацію вказівника при його визначенні. Це можна зробити одним з двох способів: тип *ім’я_вказівника = вираз_що_ініціалізує; або тип *ім’я_вказівника (вираз_що_ініціалізує); Вираз_що_ініціалізує може бути Ø явно заданою адресою: char *p_char = (char *)0xB8000000; Ø вказівником, що вже має значення: char *p_char = (char *)0xB8000000; Ø виразом, який дозволяє отримати адресу за допомогою операції &: char *ch; Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |