Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Ссылки и указатели  (Прочитано 20757 раз)
0 Пользователей и 8 Гостей смотрят эту тему.
Pokemon
Гость
« : 20-06-2003 12:16 » 

Всем привет...
У меня такой вопрос: часто в литературе я встречаю фразы "ссылка" и "указатель". Кто-нибудь может объяснить чем отличаются данные термины. Если можно то объясните буквально "на пальцах". Спасибо!
Записан
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 20-06-2003 12:26 » 

Это ты о переменных да?

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

Ссылка это создание еще одной переменной которая на самом деле не существует просто компилятор привязывает еше одну мнемонику к уже существующей ячейке. Дополнительная память не выделяется, ты просто получаешь возможность обращаться к одному и томуже участку памяти по двум именам.
Записан

Да да нет нет все остальное от лукавого.
Aleck D.Shadow
Опытный

tr
Offline Offline
Пол: Мужской

« Ответ #2 : 20-06-2003 12:28 » 

Моё мнение:
Понятия по сути одни и те же!
Разница возможна в том, что ссылка означает указатель на типизированный объект, а указатель понятие общее, т.е. на любой объект.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 20-06-2003 16:10 » 

Ну указатель тоже бывает и типизированный и простой - разница в том, что наличиствует отдельное место для указателя.
Записан

А птичку нашу прошу не обижать!!!
Allex63
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 28-12-2004 13:54 » 

Господа, вы о чем??? :?
Указатель - (pointer) - переменная. В зависимости от типа процессора от 1 до 8 байт.
Ссылка - "способ добраться до...".
 Например,
 Windows:*.lnk
 INet: URL
Указатель - способ реализации ссылок в большинстве языков программирования.
Записан

Мысли должны быть короткие и плоские.
Так их в ROM больше помещается.
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 28-12-2004 14:53 » 

По своей природе указатель и ссылка суть одно и то же -- синоним переменной. Упрощённо говоря, различие в синтаксисе.

Пример: пусть есть тип T с полем field, и пусть переменная ptr -- указатель на объект типа T, а переменная ref -- ссылка на объект типа T
Тогда доступ к полю объекта через указатель и ссылку в паскале записывается так:
Код:
ptr^.field := some_val;
ref.field := some_val2;
В обоих случаях значения переменных ptr и ref не изменятся, изменятся значения поля field в тех объектах, на которые указывают/ссылаются ptr и ref.
Как видно, отличие только в том, что после имени указателя надо ставить крышечку, а после имени ссылки нет.
« Последнее редактирование: 28-12-2004 14:57 от npak » Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #6 : 29-12-2004 22:31 » 

это абсолютно одно и то же. "указатель p ссылается на область памяти по адресу XXXX" и т.д. тавтологией занимаетесь. в object pascal такого понятия, как ссылка нет вообще. неверующие могут набрать в справке слово reference.

Записан

Alf
Гость
« Ответ #7 : 30-12-2004 07:44 » 

По-моему, некоторое отличие все же существует.

Я бы трактовал указатель как переменную, которая хранит ссылку на объект. То есть ссылка - это значение, которое может быть присвоено указателю.

То есть указатель имеет физическое воплощение в виде некоей переменной, которой можно присвоить значение, посмотреть отладчиком и т.п. Со ссылкой такое вряд ли получится.
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 30-12-2004 14:47 » 

x77, насколько я помню, в Паскале различают передачу параметров в процедуру по значению и по ссылке (var parameters)

внутри процедуры формальный параметр, объявленный как var параметр, является ссылкой на фактический параметр, переданный в процедуру/функцию в точке вызова.

Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 30-12-2004 17:57 » new

Альф писал:
/
Я бы трактовал указатель как переменную, которая хранит ссылку на объект. То есть ссылка - это значение, которое может быть присвоено указателю.
/
imho проще надо: уКАЗАТЕЛЬ это переменная, которая хранит адрес. Ссылка - это адрес.
так не проще ? Улыбаюсь
Записан

Alf
Гость
« Ответ #10 : 30-12-2004 22:13 » 

Алексей1153, пожалуй, проще.  Улыбаюсь

Просто адрес - слишком низкоуровневое понятие. А мы все-таки о высокоуровневых языках говорим и делаем вид, типа мы не знаем, где оно все сидит на самом деле.  Ага

Да и не нужно при этом вдаваться в устройство оперативной памяти. Выдала тебе исполняющая система ссылку на объект - изволь хранить и использовать для обращения к этому объекту.
Записан
Alf
Гость
« Ответ #11 : 30-12-2004 22:30 » 

... в object pascal такого понятия, как ссылка нет вообще. неверующие могут набрать в справке слово reference.
Не побоявшись прослыть вероотступником, зашел в Delphi 5 (и нечего обзываться старьевщиком, давно я завязал с этим делом, новых версий не ставил, но на всякий случай не удалил с диска), в справочной системе нашел раздел Object Pascal Reference и раскрыл главу Value and variable parameters.

Вот что я там прочитал:
Цитата
Most parameters are either value parameters (the default) or variable (var) parameters. Value parameters are passed by value, while variable parameters are passed by reference.
Так что и дельфисты ссылками грешат втихомолку, только стесняются и в индекс это слово не выкладывают - поиск по слову reference результатов не принес. Но у нас руки длинные...

Поискал еще немного. В главе Pointers and pointer types нашел:
Цитата
The general-purpose Pointer type can represent a pointer to any data, while more specialized pointer types reference only specific types of data.
Однако не такое уж сильное табу на ссылки в Дельфях. Хотя в большинстве случаев они усиленно пытаются называть их "адресом", нет-нет да и проскакивает слово "ссылка".
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines