C дозволяє створювати як хаос, і ясність з допомогою покажчиків. Це залежить від того, як на це дивитись. Мова дозволяє будь-якій кількості покажчиків вказувати на ту саму адресу пам’яті. Це не є помилкою. Це особливість.

Розглянемо i. Оголосіть p, q та r як покажчики на цілі числа. Вкажіть усі їх на i. Код виглядає так:

`

Досить просто. Але що відбувається під капотом?

Вказівники – це просто адреси

У наведеному вище прикладі r не вказує на p. Він свідчить про те, що вказує p. А саме на i.

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

Це всі різні мітки для того самого фрагмента оперативної пам’яті. Ви можете створити стільки вказівників, скільки захочете. Обмеженням є ваша пам’ять, а не мова.

Чому це важливо

Ця поведінка змінює спосіб керування даними. Якщо ви передаєте вказівник у функцію, будь-які зміни, внесені через цей покажчик, впливають на вихідну змінну. Якщо кілька функцій зберігають покажчики на ту саму адресу, вони всі бачать одні й ті самі зміни.

Це створює загальний стан. Корисно для кешування. Небезпечно, якщо ви втрачаєте контроль над тим, хто куди записує.

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

Ця гнучкість потужна. Вона також складна. Один покажчик змінює значення. Решта бачать його негайно. Синхронізація не потрібна. Просто прямий доступ до пам’яті.

Подумайте про налагодження. Якщо змінна несподівано змінюється, перевірте усі вказівники. Кожен із них може бути винуватцем. Усі вони мають однакову силу. І однакова відповідальність.

Це не складна логіка. Це проста арифметика покажчиків. Але наслідки поширюються на всю програму. Одна адреса. Багато імен. Усі пов’язані.