Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/studb20/public_html/index.php on line 4
 1.8.4 Багаторівнева непряма адресація - Програмування С, С++теорія та практика (частина 1) - Studbook
Главная->Інформатика та програмування->Содержание->1.8.4 Багаторівнева непряма адресація

Програмування С, С++теорія та практика (частина 1)

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

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

іп£    і = 123 /* де: і - ім'я змінної */

іп£  *рі = &і; /* рі - покажчик на змінну і  */

іп£ **ррі = &рі;  /*                  ррі - покажчик на покажчик     на

змінну рі */

іп£ * * *рррі = &ррі; /* рррі - покажчик на 'покажчик на

'покажчик на змінну ррі' */

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

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

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

Наприклад, після оголошення: іп£ і, *рі=&і;

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

*рі - визначає значення змінної, рі - покажчик на змінну і.

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

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

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

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

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

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

звертання за допомогою покажчика

Звертання

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

Р.н.а.

і

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

1

*рі

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

1

рі

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

0

**ррі

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

2

*ррі

покажчик на змінну типу іпі

1

ррі

покажчик на "покажчик на змінну типу іпі', значення покажчика ррі

0

***рррі

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

3

**рррі

покажчик на змінну типу іпі

2

*рррі

покажчик на 'покажчик на змінну типу іпі'

1

рррі

покажчик на 'покажчик на 'покажчик на змінну типу іпі', значення покажчика рррі

0

 

 

46