У C є особливість, яка збиває з пантелику новачків, але при цьому забезпечує роботу складних систем. Ви можете направити десятки покажчиків на ту саму адресу пам’яті.
Розглянемо просте ціле чисельне значення i. Ви можете оголосити три покажчики – p, q і r – і пов’язати їх з ним.
`
Не магія. Це просто копіювання адреси. Коли ви пишете r = p, компілятор копіює адресу, що зберігається в p, в r. Те саме відбувається з q.
Тепер у i є чотири імені. Це i. Це * p. Це ‘*q’. Це * r.
Жорсткого обмеження цього немає. Ви можете мати сотні покажчиків, що посилаються на ту саму ділянку оперативної пам’яті. Кожен з них є окремою змінною у вашому коді, але всі вони вказують на те саме місце в пам’яті.
Саме тому зміни, внесені через один покажчик, зачіпають решту. Змінюєте * p? Значення за цією адресою також зміниться для q та r. Це прямий доступ до тих самих даних.
Чому це важливо? Тому що це дозволяє створювати аліас (aliasing). Ваша програма може розглядати ті самі дані через різні «лінзи». Один покажчик може трактувати їх як структуру (struct), а інший як масив байтів. Дані у своїй не змінюються. Змінюється їхня інтерпретація.
Ця гнучкість потужна. Але саме тут ховаються помилки. Якщо ви втратите контроль над тим, куди вказує кожен покажчик, можна випадково перезаписати дані, які не планували змінювати. Але поки що просто запам’ятайте: покажчики — це просто адреси. А адреси можна поділяти.
































