Для меня, концепция - это то же самое , или, по крайней мере, она должна быть такой же, , но фактическое использование не .
Когда мы говорим об указателях или ссылках, мы говорим о концепции. Эта переменная «указывает» или является «ссылкой» на что-то еще, то, что хранится где-то еще.
Если я использую эту ссылку, например, обновляя значение, я фактически обновляю ссылочный объект, объект, на который указывает переменная. Если у меня есть объект, на который ссылаются из двух разных мест, я фактически обновляю одну и ту же вещь из обоих мест.
Таким образом, концепция может быть связана с вашим адресом в реальном мире, это просто способ сослаться на другое, и эту ссылку можно передать, как и многие люди, имеющие мой адрес.
Разница больше в том, как оно использовалось и что было разрешено языком. Обратите внимание, что детали реализации ссылки или указателя не подразумеваются в самой концепции. В C # это продолжает быть правдой.
Ссылка - это ссылка, и в таком случае просто не имеет смысла суммировать две ссылки или добавлять одну к ссылке ... что бы это вообще значило? Я не могу добавить два домашних адреса (например, Бейкер-стрит + Домашняя улица) ...
В C ++ деталь реализации ссылки на самом деле является ссылкой. Таким образом, указатель не просто указатель, он также (и используется как) адрес памяти. Таким образом, например, вы можете добавить указатели, потому что на самом деле имеет смысл добавить два адреса памяти для получения другого или добавить 4 к адресу памяти. Таким образом, в C ++ указатель перестал быть концептом и стал именем, данным для фактической реализации .
Вот почему в C # указатели и ссылки - это разные вещи. Поскольку с точки зрения семантики значение очень похоже, они хотели отличить от старой концепции C и C ++, где указатель стал таким же, как адрес памяти.
Я рекомендую вам прочитать статью " Ссылки не являются адресами " от Эрика Липперта , где, как мне кажется, он отлично справляется с объяснением различий.