| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C++] Указатели и функции |
| Автор: DEIN 4.6.2007, 13:02 | ||||
| Добрый день! Вот разбираюсь со ссылками и указателями.
Меня интерисует строка номер 10. Как видно из определения функции, функция swap должно принимать параметры в виде указателей на тип int, т.е. насколько я понял, должны создаваться локальные указатели функции swap и иницилизироваться адресами переменных Y и X. Иными словами должен быть такой код в 10-ой строке: swap(&X, &Y);. Этот способ срабатывает великолепно (и это понятно), как и великолепно срабатывает способ в преведенном выше коде (swap(X, Y);). Но я не могу понять почему! Ведь нельзя же записать:
|
| Автор: S.A.G. 4.6.2007, 13:39 | ||
Ага не, не массивы.
Да, нельзя. Указатель можно инициализировать только адресом а не значением. |
| Автор: Sartorius 4.6.2007, 13:40 |
| S.A.G., эээ... где у него массивы то? DEIN, что за компилятор? По идее ругаться он должен, но видно слишком умный и сам правильно приводит к указателям. |
| Автор: S.A.G. 4.6.2007, 13:49 |
| Мне кажется, DEIN создал еще одну версию функции swap которая принимает указатели. Если он в качестве параметров задает int то вызывается "встроенная" функция. |
| Автор: Sartorius 4.6.2007, 13:53 |
| S.A.G., в STL есть множество вариантов swap. Скорее всего ты прав. DEIN, какие h-ники используешь? |
| Автор: S.A.G. 4.6.2007, 14:05 |
| DEIN, запусти программу пошагово и посмотри что оно тебя отсылает не на твою функцию. Иначе бы оно не работало. |
| Автор: Rockie 4.6.2007, 14:07 | ||
DEIN, это работает не твоя функция, а swap из std.
|
| Автор: Xenon 4.6.2007, 14:08 |
| Ну естественно работает только потому, что вызывается стандартная std::swap(T obj, Tobj2); Очередной урок - не используйте using директивы где попало |
| Автор: DEIN 4.6.2007, 14:29 |
| Спасибо, проблема решена! Просто в учебнике как пример функция была названа swap, ну а я поленился свое название придумывать (: П.с.: Блин жалко 100 постов нету, так бы всем кто помог плюсики поставил... Оффтоп: Xenon, ты зарегился на форуме в день моего рождения! лол! |
| Автор: Xenon 4.6.2007, 14:43 |
| DEIN, |
| Автор: Ak47black 10.6.2007, 13:03 | ||
| Xenon, Dein, тебе надо вообще осторожно относиться к именам и стараться не называть функции или переменные на подобии Rectangle и т.д. при использовании модулей, библиотек тоесть эти файлы которые через #include идут, так как в них могут быть такие-же функции и переменные в результате может возникнуть нестыковка изза того что например функция и переменная названа одинаково. Компилятор не знает заранее что там функция или переменная будет и берет наиболее подходящий по какимто критериям ему тип. А вообще что-бы тебе понять какой код он использовает там, то поставь бряк на эту функцию (breakpoint) и посмотри куда он прыгнет во время выполнения. Что-бы проверить когда кодишь, можешь сделать так - зажми Ctrl нажми на название функции и попадешь на начало её. (если у тебя в коде нету ошибок иногда это нельзя сделать и только для Borland builder у тя он вроде)
Ну и офигеный учебник с ошибками. |