![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
richi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.12.2008 Репутация: нет Всего: нет |
в чем заключается физический смысл ссылки на объект?
О взаимоотношениях указателями и объекта понятно: указатель хранит адрес объекта, на который он ссылается. Под указатель требуется 4 байта. когда создается объект, под него выделяется память определенного размера и его адрес быть присвоен указателю. читал, что ссылка - это разыменованный указатель, т.е. операция взятия адреса уже реализована в ссылке. и указатель и ссылка содержат адрес объекта. что происходит в памяти, когда создается ссылка? зачем тогда придумали ссылку, если есть указатель? какие могут быть случаи, что нужно использовать именно ссылку , а не указатель? |
|||
|
||||
Kallikanzarid |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
||||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
richi,
зачем тогда придумали ссылку, если есть указатель? - лень звездочку приписывать - obj.field получается короче чем obj->field :gigi: |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Ссылка и указатель это разные способы доступа к переменной. Указатель это переменная ссылка. Но не ссылка это разъименнованый указатель. если в си не было понятия ссылка, это не значит что она не существовало как сущность.
Это сообщение отредактировал(а) mes - 17.12.2008, 20:30 |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
<больше не нужно>
Это сообщение отредактировал(а) vinter - 17.12.2008, 21:07 |
|||
|
||||
richi |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.12.2008 Репутация: нет Всего: нет |
будет ли корректным если скажу так:
|
||||||
|
|||||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
http://www.cyberguru.ru/programming/cpp/cp...up2-page17.html я так понимаю ссылка просто еще одно обзывание какой либо переменой -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
нет. участок памяти не хранит ничего кроме значения. Как будет трактоваться данный участок зависит от типа переменной (интерфейса), посредством которого был осуществлен доступ к данной памяти. |
|||
|
||||
richi |
|
||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.12.2008 Репутация: нет Всего: нет |
интуитивно конешно было понятно
но дошло после этого
спасибо за ссылку на "ссылку"! ![]() пойду дальше читать Страуструпа Добавлено через 10 минут и 11 секунд
понятно класс! |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
1. Создается новый объект 1. 2. Создается новый объект 2. по образу объекта 1. 3. Переменная ассоциируется с адресом объекта 1. 4. Создается объект-указатель 4. , инициализированный адресом объекта 1. 5. Переменная ассоциируется с адресом объекта 4. Созданный объект, разрушится при выходе за границу блока, после чего ссылающиеся на это объект ссылки и указатели становятся невалидными. Указатель хранит адрес объекта в памяти, и на эту ячейку можно сослаться. Ссылка ассоциируется с адресом и будет ли он в действительности где то храниться сказать мы не можем. Ссылку в отличие от указателя нельзя изменить и это позволяет компилятору лучше оптимизировать код, а программисту быть уверенным в ее показаниях. |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
рассматривайте ссылку как алиас и будет вам щасте
![]() |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
есть процессор на котором работает программа, и для процессора есть несколько типов данных (отличаются размером и представлением) и несколько типов указателей. это "физический уровень"
остальное - абстракции ЯВУ |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Ваш взгляд понятен, мы рассматриваем одно и то же явление в разных аспектах и потому взгляды отличаются. Ссылку и указатель я рассматриваю как способ доступа к объекту (прямой/косвенный). Для меня они абстракции одного уровня и то что у указателя можно узнать его расположение в памяти является всего лишь его отличительной особенностью от ссылки. |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
UnrealMan, а что тогда не абстракция ЯП?
|
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 1 Всего: 91 |
Вот кстати интересно насчет доступа к переменной посредством ссылки. Предположим есть переменная, компилятор все так соптимизировал, что переменная будет находится в одном из регистров eax,ebx и т.д. и т.п. Тут нам в голову пришла мысль использовать ссылку. Предположим мы захотели передать ее в функцию. Что будет делать компилятор, ведь у регистров нет адреса ? Скопирует значение в стек или память и возьмет адрес оттуда ? А если это функция чужой .dll о которой компилятор не знает и оптимизировать не может ?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |