![]() |
|
|
![]()
|
|
| 040375 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 6.4.2006 Репутация: нет Всего: 2 |
ниже упрощённый до минимума отрезок кода - в принципе работоспособный, за исключением одной
детали - подскажите мне, почему в данном коде не меняется адрес функтора, передаваемого в ф-ию ptrFunc?:
Если сделать вызов ptr() в теле ф-ии ptrFunc - то всё работает. Когда же я делаю вызов в main - ответ исключительная ситуация. В отладчике видно - что адрес ptr в main после вызова ptrFunc не меняется. Т.е. в ptrFunc создаётся копия указателя. Почему так? Ведь указатели содержат адресс объекта и он не константный и должен по идее меняться! Что я здесь забыл или упустил? Второй вопрос из той же оперы:
|
||||
|
|||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: нет Всего: 61 |
040375,
ВСЕ параметры в С++ передаются по значению В твоем случае ты передаешь указатель. В стеке создается КОПИЯ этого указателя, который ты и модифицируешь. Но назад он же не возвращается. В общем, передача указателей нужна для того, чтобы можно было ИЗМЕНИТЬ то, на что он указывает (а не сам указатель) Выход: как вариант, использовать ссылки, т.е.
А лучше просто возвращать валидный указатель -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 18 Всего: 154 |
Можно использовать указатель на указатель
код не проверял Это сообщение отредактировал(а) Lazin - 31.7.2007, 16:11 |
|||
|
||||
| 040375 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 6.4.2006 Репутация: нет Всего: 2 |
Спасибо. Я полагал, что ф-ия GetAddressProc вернёт не сам указатель - а значение его. Т.е. адрес самого указателя не изменится, а адрес ф-ии на которую он ссылается - изменится. Видимо я заблуждался.
Про указатель на указатель всё было понятно, не понятно почему не рабтоал именно такой код. А в данном случае значит создавалась копия указателя, но ссылающегося на тот же адрес. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
констатирую: бардак в голове на тему указателей. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |