У мові C ви можете створити «пробку» із покажчиків, спрямованих на ту саму область пам’яті. Це не є помилкою. Це особливість мови. Ви можете оголосити стільки вказівників, скільки захочете, і всі вони посилатимуться на ту саму змінну.

Розглянемо такий сценарій. У вас є ціла змінна i. Також у вас є три покажчики: p, q та r. Ви встановлюєте p так, щоб він вказував на i. Потім ви встановлюєте q так, щоб він вказував на i. Нарешті, ви встановлюєте r так, щоб він вказував туди, куди вказує p.

`

У цьому фрагменті коду r вказує на те саме, що і p, а саме на i. Оператор присвоювання копіює адресу з правої частини до лівої. Він не копіює значення, він копіює адресу.

Після виконання коду змінної i з’являється чотири імені. Сама i, *p, *q і *r.

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

Чому це важливо? Це важливо, тому що це змінює ваше уявлення про пам’ять. Вказівник – це просто мітка для адреси. Якщо кілька міток вказують на те саме місце, всі бачать одні й самі дані. Змініть дані через *p*q теж побачить ці зміни.

Ця гнучкість потужна. Вона також небезпечна. Одна помилка в привласненні покажчика, і ви перезапише дані, які не мали наміру змінювати. Але поки що просто зрозумійте, що покажчики гнучкі. Вони не мають пам’яті, вони лише вказують на неї. І кілька покажчиків можуть вказувати на те саме місце без конфліктів.