![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
DEIN |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 22.12.2006 Где: Вильнюс (Литва) Репутация: нет Всего: нет |
Добрый день!
Вот разбираюсь со ссылками и указателями.
Меня интерисует строка номер 10. Как видно из определения функции, функция swap должно принимать параметры в виде указателей на тип int, т.е. насколько я понял, должны создаваться локальные указатели функции swap и иницилизироваться адресами переменных Y и X. Иными словами должен быть такой код в 10-ой строке: swap(&X, &Y);. Этот способ срабатывает великолепно (и это понятно), как и великолепно срабатывает способ в преведенном выше коде (swap(X, Y);). Но я не могу понять почему! Ведь нельзя же записать:
|
||||
|
|||||
S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Ага не, не массивы.
![]()
Да, нельзя. Указатель можно инициализировать только адресом а не значением. Это сообщение отредактировал(а) S.A.G. - 4.6.2007, 13:47 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
S.A.G., эээ... где у него массивы то?
DEIN, что за компилятор? По идее ругаться он должен, но видно слишком умный и сам правильно приводит к указателям. Это сообщение отредактировал(а) Sartorius - 4.6.2007, 13:45 |
|||
|
||||
S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Мне кажется, DEIN создал еще одну версию функции swap которая принимает указатели. Если он в качестве параметров задает int то вызывается "встроенная" функция.
Это сообщение отредактировал(а) S.A.G. - 4.6.2007, 13:55 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
S.A.G., в STL есть множество вариантов swap. Скорее всего ты прав.
DEIN, какие h-ники используешь? |
|||
|
||||
S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
DEIN, запусти программу пошагово и посмотри что оно тебя отсылает не на твою функцию. Иначе бы оно не работало.
![]() -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 13 Всего: 31 |
DEIN, это работает не твоя функция, а swap из std.
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 19 Всего: 50 |
Ну естественно работает только потому, что вызывается стандартная std::swap(T obj, Tobj2);
Очередной урок - не используйте using директивы где попало ![]() Это сообщение отредактировал(а) Xenon - 4.6.2007, 14:10 |
|||
|
||||
DEIN |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 22.12.2006 Где: Вильнюс (Литва) Репутация: нет Всего: нет |
Спасибо, проблема решена!
![]() ![]() Просто в учебнике как пример функция была названа swap, ну а я поленился свое название придумывать (: П.с.: Блин жалко 100 постов нету, так бы всем кто помог плюсики поставил... Оффтоп: Xenon, ты зарегился на форуме в день моего рождения! лол! ![]() Это сообщение отредактировал(а) DEIN - 4.6.2007, 14:36 |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 19 Всего: 50 |
DEIN,
![]() ![]() |
|||
|
||||
Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Xenon,
![]() ![]() Dein, тебе надо вообще осторожно относиться к именам и стараться не называть функции или переменные на подобии Rectangle и т.д. при использовании модулей, библиотек тоесть эти файлы которые через #include идут, так как в них могут быть такие-же функции и переменные в результате может возникнуть нестыковка изза того что например функция и переменная названа одинаково. Компилятор не знает заранее что там функция или переменная будет и берет наиболее подходящий по какимто критериям ему тип. А вообще что-бы тебе понять какой код он использовает там, то поставь бряк на эту функцию (breakpoint) и посмотри куда он прыгнет во время выполнения. Что-бы проверить когда кодишь, можешь сделать так - зажми Ctrl нажми на название функции и попадешь на начало её. (если у тебя в коде нету ошибок иногда это нельзя сделать и только для Borland builder у тя он вроде)
Ну и офигеный учебник с ошибками. ![]() Это сообщение отредактировал(а) Ak47black - 10.6.2007, 13:32 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |