![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
С одной стороны указатель передается не по ссылке, значит по значению. Тогда значение указателя копируется в функцию. Но это же указатель, никакой разницы нет, как передавать - все равно в нем хранится только адрес переменной.. Или смысла в передаче указателя по ссылке нет?
з.ы. или это надо, чтобы после выхода из функции адрес указателя сохранился таким, как его изменили в функции? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
почувствуй разницу
Добавлено @ 00:11 "одним словом": передавая указатель по значению(значения указателя есть адрес) можем изменить только содержимое по адресу. передавая указатель по ссылке(передаем адрес по ссылке) можем изменить содержимое по адресу, так и значение указателя(те можем сделать так что бы указатель указывал на другой "объект") Это сообщение отредактировал(а) chaos - 12.12.2009, 00:12 |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
||||
|
||||
| unicuum |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: 1 Всего: 8 |
-------------------- ![]() обычный день на винграде |
||||||||
|
|||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
"*" и "&" в приведенном примере не являются операторами. указатель - это объект который хранит чей то адрес, а раз объект, то можно брать указатель или ссылку на него. ссылка - это ассоциация с переменной, можно сказать псевдоним и у нее нет своего места в памяти - поэтому брать ссылку от ссылки, или делать указатель на ссылку нельзя. |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Спасибо за подробность! Читать такие конструкции справа налево? Ссылка на константный указатель - значение указателя нельзя будет изменить или адрес? Или запрет изменения адреса - это предпоследний вариант - (const char* const &str)? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
mes, спасибо, понял. По поводу передачи ссылки. Вы написали, что у нее нет своего места в памяти. Интересно узнать: параметру функции присваивается адрес ссылочного аргумента или такой механизм передачи по ссылке реализуется иначе?
Это сообщение отредактировал(а) Gunslinger - 14.12.2009, 14:02 |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
Пришел только к одному объяснению: переменная-ссылка существует только на уровне листинга кода. При компиляции :
int h=12; int &m=h; компилятор во всех вычислениях заменяет &m на h. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
опечатка, не &m, а m. Ну если грубо, то да.. Вы задаете второе имя (псевдоним). Только надо учитывать что не все действия применяются одинаково к m и h. |
|||
|
||||
| Gunslinger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
||||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Есть еще одна тонкость в применении ссылок:
Ни создания отдельного объекта, ни copy конструктора вызванно не будет (как в случае SomeObject ref=func();) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Хотя некоторые компиляторы идут на встречу позволяя подобное, но по правилам, насколько я знаю, временным объектом можно проинициалировать только константную ссылку. Добавлено через 2 минуты и 42 секунды В какой ? вроде бы нигде ничего не веселило ? или Вас смайлики смутили ? это просто от хорошего настроения веселение обычно выражается в таких : |
|||
|
||||
| Gunslinger |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 30.12.2006 Где: Астрахань Репутация: 1 Всего: 3 |
О, еще одна непонятная тема для топика Ясно. А то я иногда пишу "высокопарным слогом" - остатки из прошлого. Это сообщение отредактировал(а) Gunslinger - 15.12.2009, 13:46 |
||||
|
|||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Угу, это я как то пропустил . Посыпаю голову пеплом и исправляюсь
|
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |