Форум программистов, компьютерный форум CyberForum.ru

Как использовать указатели? - C++

Восстановить пароль Регистрация
 
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
02.07.2013, 21:30     Как использовать указатели? #1
проблемы с указателями как правильно использовать, подскажите?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
using namespace std;
template <class T>
struct Node {
   T value;
   Node *son;
   Node *brother;
 
   Node() 
   {
      son = brother = 0;
   }
};
template <class T>
void Add(Node *node,T item)
{
    if(!node)
    {
      Node* node = new Node<T>();
      node->value = item;
    }
    if(node->value>item)
    {
        Add(node->son),item);
    }
    else
    {
        Add(node->brother),item);
    }
 
};
template <class T>
void ShowNode(Node *node)
{
    if(node)
    {
        SowNode(node->son);
        cout<<node->value << " ";
        ShowNode(node->brother);
    }
}
int main()
{
    Node* free;
    free=new Node<int>();
    Add(free,12);
    Add(free,22);
    ShowNode(free);
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
02.07.2013, 21:37     Как использовать указатели? #2
C++
1
2
3
4
5
6
7
    int a = 5;
    int *pa = &a; // получаем адрес переменной a, и присваиваем его pa (указателю на тип int)
    int **ppa = &pa; // получаем адрес указателя pa, и присваиваем его ppa (указателю на указатель на тип int)
 
    cout << a << endl; // выводим a
    cout << *pa << endl; // разыменовываем указатель pa, тем самым получаем доступ к a
    cout << **ppa << endl; // разыменовываем указатель на указатель, тем самым получаем указатель на int, затем разыменовываем его еще раз, получаем доступ к a
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
02.07.2013, 21:45  [ТС]     Как использовать указатели? #3
Цитата Сообщение от lazybiz Посмотреть сообщение
C++
1
2
3
4
5
6
7
    int a = 5;
    int *pa = &a; // получаем адрес переменной a, и присваиваем его pa (указателю на тип int)
    int **ppa = &pa; // получаем адрес указателя pa, и присваиваем его ppa (указателю на указатель на тип int)
 
    cout << a << endl; // выводим a
    cout << *pa << endl; // разыменовываем указатель pa, тем самым получаем доступ к a
    cout << **ppa << endl; // разыменовываем указатель на указатель, тем самым получаем указатель на int, затем разыменовываем его еще раз, получаем доступ к a
Спасибо, а можете с программой помочь?
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
02.07.2013, 21:48     Как использовать указатели? #4
Цитата Сообщение от okman Посмотреть сообщение
а можете с программой помочь?
А ты объясни толком, что не получается?
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
02.07.2013, 22:07  [ТС]     Как использовать указатели? #5
Цитата Сообщение от lazybiz Посмотреть сообщение
А ты объясни толком, что не получается?
Вот программа, она останавливается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
using namespace std;
template <class T>
struct Node 
{
   T value;
   Node *son;
   Node *brother;
 
   Node() 
   {
      son = brother = 0;
   }
   ~Node()
   {}
};
template <class T>
void Add(Node<T>** node,int item)
{
    if(!(*node))
    {
      Node<T>* n = new Node<T>(); //вот здесь
      n->value = item;
      *node = n;
    }
    if((*node)->value>item)
    {
        Add(&((*node)->son),item);
    }
    else
    {
        Add(&((*node)->brother),item);
    }
 
};
template <class T>
void ShowNode(Node<T> *node)
{
    if(node)
    {
        ShowNode(node->son);
        cout<<node->value << " ";
        ShowNode(node->brother);
    }
}
int main()
{
    Node<int>* free;
    free=new Node<int>;
    Add(&free,12);
    Add(&free,22);
    ShowNode(free);
    system("pause");
    return 0;
}
Вот этой строчке.
C++
1
 Node<T>* n = new Node<T>();
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
02.07.2013, 22:26     Как использовать указатели? #6
Ошибка в бесконечной рекурсии. return в 21-й строке избавляет от этой проблемы..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
 
using namespace std;
 
template <class T>
struct Node 
{
    T       value;
    Node *  son;
    Node *  brother;
    Node() : son(0), brother(0) {}
};
 
template <class T>
void Add( Node <T> ** node, int item )
{
    if ( !(*node) ) {
        Node <T> * n = new Node <T>;
        n->value = item;
        *node = n;
        return;
    }
 
    if ( (*node)->value > item ) {
        Add( &(*node)->son, item );
    } else {
        Add( &(*node)->brother, item );
    }
}
 
template <class T>
void ShowNode( Node <T> * node )
{
    if ( node ) {
        ShowNode( node->son );
        cout << node->value << " ";
        ShowNode( node->brother );
    }
}
 
int main()
{
    Node <int> * free = 0;
//  free = new Node <int>; // по смыслу не нужно...
 
    Add( &free, 12 );
    Add( &free, 22 );
 
    ShowNode( free );
    system( "pause" );
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2013, 22:28     Как использовать указатели?
Еще ссылки по теме:

C++ Для чего нужны и зачем использовать smart-указатели?
Как использовать вектор, содержащий указатели на класс, в этом же классе? C++
C++ Зачем учить указатели, если можно использовать вектор?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
okman
 Аватар для okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 203
02.07.2013, 22:28  [ТС]     Как использовать указатели? #7
Цитата Сообщение от lazybiz Посмотреть сообщение
Ошибка в бесконечной рекурсии. return в 21-й строке избавляет от этой проблемы..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
 
using namespace std;
 
template <class T>
struct Node 
{
    T       value;
    Node *  son;
    Node *  brother;
    Node() : son(0), brother(0) {}
};
 
template <class T>
void Add( Node <T> ** node, int item )
{
    if ( !(*node) ) {
        Node <T> * n = new Node <T>;
        n->value = item;
        *node = n;
        return;
    }
 
    if ( (*node)->value > item ) {
        Add( &(*node)->son, item );
    } else {
        Add( &(*node)->brother, item );
    }
}
 
template <class T>
void ShowNode( Node <T> * node )
{
    if ( node ) {
        ShowNode( node->son );
        cout << node->value << " ";
        ShowNode( node->brother );
    }
}
 
int main()
{
    Node <int> * free = 0;
//  free = new Node <int>; // по смыслу не нужно...
 
    Add( &free, 12 );
    Add( &free, 22 );
 
    ShowNode( free );
    system( "pause" );
    return 0;
}
Спасибо, я что-то запамятовал
Yandex
Объявления
02.07.2013, 22:28     Как использовать указатели?
Ответ Создать тему
Опции темы

Текущее время: 13:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru