Ссылка (программирование)
Ссылка в программировании — это объект, указывающий на определенные данные, но не хранящий их. Получение объекта по ссылке называется разыменованием.
Ссылка не является указателем, а просто является другим именем для объекта.
В языках программирования ссылка может быть реализована как переменная, содержащая адрес ячейки памяти. В некоторых языках высокого уровня также имеется возможность использовать ссылки на объекты при передаче объектов в подпрограмму и из подпрограммы.
Содержание
Примеры реализаций ссылок[править | править вики-текст]
C++[править | править вики-текст]
Ссылки в C++ должны быть связаны с каким-либо объектом. Таким образом, «нулевые ссылки» (не связанные с каким-либо объектом) в C++ отсутствуют. Разыменование ссылок в C++ не требует специального оператора. Таким образом, в C++ ссылки — форма передачи адреса в стек напрямую, минуя копирование и указатели. При компилировании все ссылки на объект и его именем заменяются одним номером этого объекта.
В следующем примере параметр x передаётся по значению, а y — по ссылке. Результат работы функции помещается в y:
#include <iostream> using namespace std; // без этой записи нам бы пришлось дописывать "std::" к cout и endl void square(int x, int &result) { result = x*x; } int main() { int y = 0; //Инициализация square(3, y); cout << "y=" << y << endl; //y=9 return 0; }
Java и C#[править | править вики-текст]
В этих языках понятие указателя отсутствует, а вместо него используется понятие ссылки. Разыменование ссылок и взятие адресов объектов для присваивания их ссылкам не требует специального оператора.
PHP[править | править вики-текст]
Ссылки в PHP — это средство доступа к содержимому одной переменной под разными именами. Они не похожи на указатели C и не являются псевдонимами таблицы символов. В PHP имя переменной и её содержимое — это разные вещи, поэтому одно содержимое может иметь разные имена. Ближайшая аналогия — имена файлов Unix и файлы — имена переменных являются элементами каталогов, а содержимое переменных это сами файлы. Ссылки в PHP — аналог жёстких ссылок (hardlinks) в файловых системах Unix.
<?php $a = 'text'; $b =& $a; print $b.'<br />'; $a = 5; print $b.'<br />'; ?>
text 5
Erlang[править | править вики-текст]
Ссылка (англ. refererence) в Erlang является типом данных для уникального идентификатора, служащего только для выполнения сравнений и сопоставлений с образцом[1]:
send_kv(N, K, V) -> Reference = make_ref(), % создание ссылки {server, N} ! {put, self(), Reference, K, V}, % отправить запрос, включающий ссылку receive {reply, Reference, ok} -> ok % реакция на запрос after 5000 -> {error, timeout} % или таймаут end.
См. также[править | править вики-текст]
Примечания[править | править вики-текст]
- ↑ Martin Logan, Eric Merritt, Richard Carlsson. Erlang and OTP in Action. — Manning, 2011. — P. 36,343. — 397 p. — ISBN 9781933988788.
| Типы данных | |
|---|---|
| Неинтерпретируемые | |
| Числовые | |
| Текстовые | |
| Ссылочные |
Адрес • Ссылка • Ссылка в С++ • Указатель • Обёртка |
| Композитные |
Алгебраический тип данных (обобщённый) • Массив • Ассоциативный массив • Класс • Список • Кортеж • Объект • Структура • Множество • Объединение (меченое) |
| Другие |
Логический • Низший • Высший • Перечисляемый • Коллекция • Исключение • Функциональный • Род (Метакласс) • Монада • Семафор • Поток • Void |
| Связанные темы | |
| В этой статье не хватает ссылок на источники информации.
Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники. Эта отметка установлена 14 мая 2011. |