Прежде чем обсуждать разницу между указателем и ссылкой, давайте сначала кратко рассмотрим значение этих двух терминов. В программе данные занимают память. Точное местоположение памяти, в которую были помещены данные во время выполнения, должно быть известно, чтобы получить к ним доступ. Переменные указателя и ссылочные переменные используются для доступа к этим данным и манипулирования адресами памяти, по которым они находятся. То есть как указатели, так и ссылки могут использоваться для косвенной ссылки на объекты. По сути, они содержат адреса памяти в качестве своих значений. ключевое отличие между указателем и ссылкой является то, что указатель является переменной, которая хранит адрес ячейки памяти другой переменной в то время как ссылка - это переменная, которая ссылается на другую переменную. Два механизма, указатель и ссылки, имеют разный синтаксис и использование.
Указатель объект языка программирования, который хранит адрес памяти значения в вычислительной памяти.
int i = 5;
int * ptr = & i;
Первая строка определяет переменную, инициализированную значением 5. Вторая строка определяет указатель на адрес памяти переменной. Здесь ptr объявляется как объект типа указатель на int, начальное значение которого является адресом объекта i. По существу, переменная ptr указывает на i, сохраняя ее адрес памяти.
Получение значения, хранящегося в ячейке памяти, называется разыменование. Оператор * используется для разыменования указателя. После того, как объявления сделаны, косвенное выражение * ptr разыменовывает ptr для ссылки на i.
Чтобы изменить значение i, можно использовать следующее присваивание;
* ptr = 20;
Указатели могут быть переназначены для ссылки на разные объекты..
нулевой указатель это специальный тип указателя. Нулевой указатель часто обозначается 0 или нуль и указывает на ничто. Рекомендуется использовать нулевой указатель в случае отсутствия точного адреса, который будет назначен указателю. Это назначение может использоваться в логических операциях и условиях.
Указатели могут быть используется для хранения и управления адресами динамически выделяемой памяти. Реализация и управление структурами данных, такими как стеки, очереди и списки, могут быть эффективными с помощью указателей. Например, очередь может иметь два указателя; указатель головы и указатель хвоста. Указатели также могут использоваться для передачи переменных по их адресу, что позволяет изменять значение. Непосредственное управление памятью или отображаемыми в память устройствами также может быть обработано с помощью указателей..
Указатели разрешают как защищенный, так и незащищенный доступ к адресуемой памяти. Следовательно, необходимо принять необходимые меры предосторожности, чтобы убедиться, что содержимое указателя является действительным. В противном случае разыменование указателя с неверным адресом памяти может привести к сбою программы..
Указатели поддерживаются в таких языках, как C, C ++, Pascal и многих языках ассемблера.
Указатель указывая на адрес памяти, связанный с переменной б.
Ссылка просто альтернативный идентификатор для значения, хранящегося в памяти. Это позволяет программе косвенно обращаться к определенным данным.
int i = 5;
int & ref = я;
Первая строка определяет переменную, инициализированную со значением 5. Вторая строка объявляет 'ref' как объект типа 'ссылка на int', который ссылается на i. Ссылка отличается от самих данных, учитывая, что ссылка реализована как физический адрес конкретного элемента данных, который хранится в памяти.
После определения ссылки не может быть назначено новое значение. Ссылка всегда ссылается на объект, с которым она инициализирована. В следующем назначении ref по-прежнему ссылается на i, но теперь значение равно 20.
ref = 20;
Согласно приведенному выше примеру, разыменование ссылок не требует никаких операторов.
Ссылки могут использоваться, когда переменная всегда ссылается на объект. Это связано с тем, что, в отличие от указателей, ссылки не могут быть нулевыми и всегда должны назначаться при инициализации. Поскольку ссылки всегда должны ссылаться на некоторый объект, создание такой переменной ссылки гарантирует, что программа будет работать эффективно и правильно. Учитывая, что нет нулевых ссылок, валидность ссылочной переменной не нужно проверять.
Справочные переменные могут быть используется для эффективной передачи больших данных в качестве аргументов процедур. Ссылки также используются при совместном использовании больших данных между различными областями кода, поскольку каждый код сохраняет ссылку на данные..
Языки программирования, такие как C ++, Java, Python, Perl, PHP, Ruby и т. Д., Поддерживают ссылки.
Указатель: Указатель - это адрес памяти объекта, хранящийся в компьютерной памяти.
Ссылка: Ссылка - это альтернативный идентификатор или псевдоним для объекта..
Указатель: Указатель объявляется с оператором *.
Ссылка: Ссылка объявляется с оператором &.
Указатель: Переменная-указатель требует разыменования оператора *.
Ссылка: Ссылочная переменная не требует разыменования оператора.
Указатель: Указатели могут быть инициализированы нулем. Такие переменные называются нулевыми указателями.
Ссылка: Ссылки не могут быть инициализированы нулем. Нет такой вещи как нулевая ссылка. Ссылка всегда должна ссылаться на объект.
Указатель: Переменная указателя может быть переназначена для ссылки на разные объекты.
Ссылка: Ссылочная переменная не может быть переназначена. Это всегда относится к объекту, с которым он был инициализирован.
Указатель: Переменные указателя следует использовать, когда существует возможность сослаться на что-либо, или когда требуется ссылаться на разные вещи в разное время..
Ссылка: Ссылочные переменные следует использовать, когда всегда будет объект для ссылки, и когда нет необходимости использовать эту ссылочную переменную для ссылки на что-либо еще, кроме этого объекта.
Указатель: Переменные-указатели могут использоваться для реализации алгоритмов и структур данных.
Ссылка: Ссылочные переменные могут использоваться в параметрах функции, а возвращаемые типы определяют полезные интерфейсы.
Указатель: Языки программирования, такие как C, C ++, Pascal и многие языки ассемблера, поддерживают указатели.
Ссылка: Языки программирования, такие как C ++, Java, Python, Perl, PHP, Ruby и т. Д., Поддерживают ссылки.
Предоставлено изображение: «Указатели». Этот файл был создан пользователем: SvenTranslation.Own work. Это векторное изображение было создано с помощью Inkscape. (CC BY-SA 3.0) через Commons -