# Адреса

Перед безпосереднім виконанням операційна система (ОС) завантажує програму у оперативну пам'ять. Пам'ять для програми (під час її виконання) виглядає як велетенський масив комірок, кожна з яких має **адресу** та може зберігати **1 байт інформації**.

* Адреса - це просто число, порядковий номер комірки в пам'яті.
* Найменьша кількість інформації яка може бути зчитана чи записана за раз  - 1 байт.

Змінні, які ми оголошуємо у програмі містять дані, а отже ці дані мають адресу у пам'яті. Для того, щоб дізнатися адресу користуються оператором \`&\`. У наступному прикладі ми оголошуємо кілька змінних, виводимо їх значення, а потім - адресу у пам'яті.

```cpp
int number = 42;
std::cout << " number value: " << number << std::endl
    << " number address: " << &number << std::endl
    << std::endl;

std::string message = "Hello, World!";
std::cout << " message value: " << message << std::endl
    << " message address: " << &message << std::endl
    << std::endl;
```

Якщо ми запустимо цей код, то отримаємо вивід:

```
 number value: 42
 number address: 00000000001EF8A0

 message value: Hello, World!
 message address: 00000000001EF8B0
```

Значення адреси `00000000001EF8B0` виглядає дуже незвично. Це тому, що це **шістнадцяткове число**. Детальніше про шістнадцяткову систему числення можна прочитати [тут.](https://uk.wikipedia.org/wiki/%D0%A8%D1%96%D1%81%D1%82%D0%BD%D0%B0%D0%B4%D1%86%D1%8F%D1%82%D0%BA%D0%BE%D0%B2%D0%B0_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%BD%D1%8F) Але загалом, для того, щоб почати працювати з памяттю в С++ знати це не обов'язково. Просто звикніть, що існує такий спосіб представлення чисел.

**Не плутайте отримання адреси з оголошенням посилання! Коли ми застосовуємо оператор '&' до окремої змінної - це операція отримання адреси!**&#x20;

Наприклад:

```cpp
int number = 42;

// Оголошуємо посилання на int!
int &refNumber = number;

// Беремо адресу number та виводимо у консоль!
std::cout << &number << std::endl;
```
