Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вказівники та посилання.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
857.42 Кб
Скачать

3 Основні операції над вказівниками

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.12 (де Р.н.а. - рівень непрямої адресації):

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

Звертання

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

Р.н.а.

i

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

1

*pi

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

1

pi

змінну типу int, значення pi

0

**ppi

значення змінної типу int

2

*PPi

вказівник на змінну типу int

1

ppi

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

0

***pppi

значення змінної типу int;

3

**pppi

вказівник на змінну типу int

2

*pppi

вказівник на 'вказівник на змінну типу int'

1

pppi

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

0