Ссылка (программирование)

Поделись знанием:
(перенаправлено с «Ссылки (тип данных)»)
Перейти к: навигация, поиск

Ссылка в программировании — это объект, указывающий на определенные данные, но не хранящий их. Получение объекта по ссылке называется разыменованием.

Ссылка не является указателем, а просто является другим именем для объекта.

В языках программирования ссылка может быть реализована как переменная, содержащая адрес ячейки памяти. В некоторых языках высокого уровня также имеется возможность использовать ссылки на объекты при передаче объектов в подпрограмму и из подпрограммы.





Примеры реализаций ссылок

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;
$a = 5;
print $b;
 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.

См. также

Напишите отзыв о статье "Ссылка (программирование)"

Примечания

  1. Martin Logan, Eric Merritt, Richard Carlsson. Erlang and OTP in Action. — Manning, 2011. — P. 36,343. — 397 p. — ISBN 9781933988788.

Отрывок, характеризующий Ссылка (программирование)

Тройка старого графа, в которую сел Диммлер и другие ряженые, визжа полозьями, как будто примерзая к снегу, и побрякивая густым колокольцом, тронулась вперед. Пристяжные жались на оглобли и увязали, выворачивая как сахар крепкий и блестящий снег.
Николай тронулся за первой тройкой; сзади зашумели и завизжали остальные. Сначала ехали маленькой рысью по узкой дороге. Пока ехали мимо сада, тени от оголенных деревьев ложились часто поперек дороги и скрывали яркий свет луны, но как только выехали за ограду, алмазно блестящая, с сизым отблеском, снежная равнина, вся облитая месячным сиянием и неподвижная, открылась со всех сторон. Раз, раз, толконул ухаб в передних санях; точно так же толконуло следующие сани и следующие и, дерзко нарушая закованную тишину, одни за другими стали растягиваться сани.
– След заячий, много следов! – прозвучал в морозном скованном воздухе голос Наташи.
– Как видно, Nicolas! – сказал голос Сони. – Николай оглянулся на Соню и пригнулся, чтоб ближе рассмотреть ее лицо. Какое то совсем новое, милое, лицо, с черными бровями и усами, в лунном свете, близко и далеко, выглядывало из соболей.
«Это прежде была Соня», подумал Николай. Он ближе вгляделся в нее и улыбнулся.
– Вы что, Nicolas?
– Ничего, – сказал он и повернулся опять к лошадям.
Выехав на торную, большую дорогу, примасленную полозьями и всю иссеченную следами шипов, видными в свете месяца, лошади сами собой стали натягивать вожжи и прибавлять ходу. Левая пристяжная, загнув голову, прыжками подергивала свои постромки. Коренной раскачивался, поводя ушами, как будто спрашивая: «начинать или рано еще?» – Впереди, уже далеко отделившись и звеня удаляющимся густым колокольцом, ясно виднелась на белом снегу черная тройка Захара. Слышны были из его саней покрикиванье и хохот и голоса наряженных.
– Ну ли вы, разлюбезные, – крикнул Николай, с одной стороны подергивая вожжу и отводя с кнутом pуку. И только по усилившемуся как будто на встречу ветру, и по подергиванью натягивающих и всё прибавляющих скоку пристяжных, заметно было, как шибко полетела тройка. Николай оглянулся назад. С криком и визгом, махая кнутами и заставляя скакать коренных, поспевали другие тройки. Коренной стойко поколыхивался под дугой, не думая сбивать и обещая еще и еще наддать, когда понадобится.
Николай догнал первую тройку. Они съехали с какой то горы, выехали на широко разъезженную дорогу по лугу около реки.
«Где это мы едем?» подумал Николай. – «По косому лугу должно быть. Но нет, это что то новое, чего я никогда не видал. Это не косой луг и не Дёмкина гора, а это Бог знает что такое! Это что то новое и волшебное. Ну, что бы там ни было!» И он, крикнув на лошадей, стал объезжать первую тройку.