Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lek6_cpp_ukr.rtf
Скачиваний:
4
Добавлен:
18.11.2019
Размер:
340.33 Кб
Скачать

4. Багаторівнева непряма адресація

       У мові Сі можна використовувати багаторівневу непряму адресацію, тобто непряму адресацію на 1, 2 і т.д. рівні. При цьому для оголошення і звертання до значень за допомогою вказівників можна використовувати відповідно кілька символів зірочка: *. Зірочки при оголошенні ніби уточнюють призначення імені змінної, визначаючи рівень непрямої адресації для звертання до значень за допомогою цих вказівників. Приклад оголошення змінної і вказівників для багаторівневої непрямої адресації можна привести наступний:

int i = 123 /* де: i - ім'я змінної */ int *pi = &i; /* pi - вказівник на змінну і */ int **ppi = π /* ppi - вказівник на вказівник на змінну pi */ int ***pppi = &ppi; /* pppi - вказівник на 'вказівник на 'вказівник на змінну ppi' */

       Для звертання до значень за допомогою вказівників можна прийняти наступне правило, що жорстко зв'язує форму звертання з оголошенням цих вказівників:

   • повна кількість зірочок непрямої адресації, рівна кількості зірочок при оголошенні вказівника, визначає значення змінної;

   • зменшення кількості зірочок непрямої адресації додає до імені змінної слово "вказівник", причому цих слів може бути стільки, скільки може бути рівнів непрямої адресації для цих імен вказівників, тобто стільки, скільки зірочок стоїть в оголошенні вказівника.

Наприклад, після оголошення:

int i, *pi=&i;

звертання у виді:

*pi - визначає значення змінної,

pi - вказівник на змінну i.

А при звертанні до змінних можна використовувати різну кількість зірочок для різних рівнів адресації:

pi, ppi, pppi - 0-й рівень адресації, пряма адресація;

*pi, *ppi, *pppi - 1-й рівень непрямої адресації

**ppi, **pppi - 2-й рівень непрямої адресації

***pppi - 3-й рівень непрямої адресації

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

Таблиця 1. Відповідність між кількістю уточнень (*) і результатом звертання за допомогою вказівника

Звертання

Результат звертання

Р.н.а.

I

значення змінної i

1

*pi pi

значення змінної, на яку вказує pi вказівник на змінну типу int, значення pi

1 0

**ppi *ppi ppi

значення змінної типу int вказівник на змінну типу int вказівник на "вказівник на змінну типу int', значення вказівника ppi

2 1 0

***pppi **pppi *pppi pppi

значення змінної типу int; вказівник на змінну типу int вказівник на 'вказівник на змінну типу int' вказівник на 'вказівник на 'вказівник на змінну типу int', значення вказівника pppi

3 2 1 0

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]