АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Загальні відомості про вказівники

Читайте также:
  1. I. Мета, завдання та загальні вимоги до виконання курсової роботи
  2. Апаратура, загальні вказівки по виконанню процедур
  3. Апаратура, загальні вказівки по виконанню процедур
  4. Бази даних. Основні відомості
  5. Відомості в галузі зовнішньої політики і економіки, які можуть становить державну таємницю, —
  6. Відомості досудового розслідування можна розголошувати лише з дозволу слідчого або прокурора і в тому обсязі, в якому вони визнають можливим.
  7. Відомості про авторів
  8. Відомості про виконання робіт
  9. Відомості про виконання робіт
  10. ВІДОМОСТІ ПРО РАЙОН ПОДОРОЖІ
  11. Відомості щодо освіти та стажу роботи кадрового складу інформаційно-аналітичного відділу
  12. Відомості, що вносяться до ЄРДР

Теоретичні основи

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

Щоб отримати адресу, у мові C++ використовують унарну операцію &. Таким чином, якщо змінна має ім’я v, то її адресою є &v. Операція & може застосовуватися тільки до об’єктів, які мають ім’я і розміщені в пам’яті. Вона не застосовується до констант, виразів, бітових полів структур, регістрових змінних, файлів.

Для зберігання адрес використовують змінні спеціального типу – «вка­зів­ники». При цьому значенням вказівника є адреса змінної конкретного типу, і не можна у вказівниках одного типу зберігати адреси змінних іншого типу.

При описанні або визначенні вказівника найпростішим є викорис­тання такого формату:

тип *ім’я змінної;

Наприклад:

char *ch;
int *n1, *n2;
double *f;

Тут символ * – це операція розіменування, яка застосовується до адреси. Результатом цієї операції є об’єкт, на який указує вказівник. Таким чином, *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 *p_screen = pchar;

Ø виразом, який дозволяє отримати адресу за допомогою операції &:

char *ch;
char *pt = &ch;


1 | 2 | 3 | 4 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)