Ответ
Ссылки и указатели в C++ (и аналогично в Java/Kotlin для объектов) имеют ключевые отличия:
-
Инициализация:
Ссылка обязана быть инициализирована при объявлении и не может бытьnull, указатель может бытьnullptr(илиnullв Java/Kotlin). -
Переприсваивание:
Ссылку нельзя перенаправить на другой объект после инициализации, указатель — можно. -
Синтаксис:
Указатели используют*и->, ссылки работают как обычные переменные (.).
Пример (C++):
int a = 5;
int& ref = a; // ссылка
int* ptr = &a; // указатель
ref = 10; // a = 10
*ptr = 20; // a = 20
ptr = nullptr; // допустимо
// ref = nullptr; // ошибка!
В Java/Kotlin все переменные объектов — ссылки (но с возможностью null), примитивы хранятся по значению.