Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатель на указатель 
V
    Опции темы
qwerty233
Дата 15.5.2011, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 3.10.2010

Репутация: нет
Всего: нет



Никак не могу понять для чего здесь указатель на указатель, без него я так понимаю рекурсии не будет? Может кто подскажет как он работает?
Код

void insert( TreeNode<TREETYPE> **ptr, TREETYPE &value )
        {
            if( *ptr == 0 )
                *ptr = new TreeNode<TREETYPE>( value );
            else
            {
                if( value > ( *ptr )->data )
                    insert( &( ( *ptr )->rightPtr ), value );

                else if( value < ( *ptr )->data )
                    insert( &( ( *ptr )->leftPtr ), value );
            }
        }

PM MAIL   Вверх
borisbn
Дата 15.5.2011, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(qwerty233 @  15.5.2011,  14:08 Найти цитируемый пост)
Никак не могу понять для чего здесь указатель на указатель

из-за этой строчки
Цитата(qwerty233 @  15.5.2011,  14:08 Найти цитируемый пост)
*ptr = new TreeNode<TREETYPE>( value );

здесь переданный указатель изменяется. Если бы в ф-цию передавался просто указатель, то записав в него новое значение, его (новое значение) не увидели бы "снаружи".
Проще всего это понять, если привести пример не с указателем, а простос int:
Код

void foo( int p ) {
    p = 42; // на самом деле мы не меняем то, что нам передали, а меняем "местную" переменную p
}
void bar( int * p ) {
    *p = 42; // вот тут мы меняем ту переменную, которую нам передали
}

int x = 0;
foo( x ); // x по прежнему равен 0
bar( &x ); // x равен 42


Цитата(qwerty233 @  15.5.2011,  14:08 Найти цитируемый пост)
без него я так понимаю рекурсии не будет

рекурсия происходит не из-за указателя, а из-за вызова ф-ции insert самой из себя (строки 8 и 11)
Цитата(qwerty233 @  15.5.2011,  14:08 Найти цитируемый пост)
Может кто подскажет как он работает?

Можешь сам посмотреть, немного модифицировав код:
http://liveworkspace.org/code/e3e5691b20df...92ccb702ac9ada7

Добавлено через 5 минут и 30 секунд
Ещё пару замечаний:
1. Я не знаю, может так положено по алгоритму, но, если в дереве уже лежит элемент, равный value, то это значение никуда не добавится, т.к. в коде две проверки на меньше и на больше.
2. Не понятно почему value передаётся не по константной, а по обычной ссылке ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
qwerty233
Дата 15.5.2011, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 3.10.2010

Репутация: нет
Всего: нет



Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0939 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.