Назад к вопросам
Junior
90
questionbank
Расскажите о различиях между ссылкой и указателем в языке C/C++.
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Ссылку можно рассматривать как псевдоним для существующего объекта; указатель содержит адрес памяти объекта.
| Характеристика | Ссылка | Указатель |
|---|---|---|
| Инициализация | Должна быть инициализирована при объявлении. | Может быть неинициализирован. |
| Переназначение | Не может быть переназначена после инициализации. | Может указывать на другой объект. |
| Нулевое значение | Не может быть null. | Может быть nullptr (C++11) или NULL (C/C++). |
| Индексация массива | Не поддерживает прямую арифметику указателей. | Поддерживает арифметику указателей. |
| Операторы | Используется напрямую (. для членов). |
Использует * для разыменования, -> для членов. |
| Размер | Не имеет собственного размера, ссылается на размер объекта. | Имеет размер, соответствующий размеру адреса в системе (обычно 4 или 8 байт). |
| Выделение памяти | Не требует явного выделения/освобождения памяти. | Может требовать new/delete (в C++). |
| Использование | Часто как параметры функций для передачи по ссылке. | Для динамического выделения памяти, низкоуровневого доступа. |
// Пример использования ссылки
int x = 10;
int& ref = x; // ref - псевдоним для x
ref = 20; // x теперь 20
// Пример использования указателя
int y = 30;
int* ptr = &y; // ptr указывает на адрес y
*ptr = 40; // y теперь 40
// Указатель может быть nullptr
int* null_ptr = nullptr;