Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 204
#1

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

02.07.2013, 21:30. Просмотров 609. Ответов 6
Метки нет (Все метки)

проблемы с указателями как правильно использовать, подскажите?
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2013, 21:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как использовать указатели? (C++):

Как использовать указатели при работе с массивами? - C++
подскажите пожалуйста как правильно использовать указатели при работе с массивами. Как написать этк программу используя указатели? ...

Класс и конструктор с string или как использовать указатели. - C++
Есть такая вот ерунда class human { public: string name; string surname; int age; human(string *imya, string *familia,...

Указатели на функцию - как их использовать, как объявлять - C++
читаю книжку и столкнулся с указателями на функцию. автор пробегается в несколько страниц по ним, как их использовать, как объявлять. Но...

Как правильно использовать Указатели для массива (ошибки в программе)? - C++
Необходимо переписать программу правильно, чтобы использовались указатели. Помогите, пожалуйста!!! Примерный (с ошибками код): ...

Как использовать вектор, содержащий указатели на класс, в этом же классе? - C++
Возникла необходимость обращения к объекту класса внутри класса с помощью вектора, содержащего указатели на объекты этого класса. ...

Использовать вместо массивов - указатели - C++
Помогите переписать, чтоб вместо массивов были показатели! #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main()...

6
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 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
1
okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 204
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
Спасибо, а можете с программой помочь?
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
02.07.2013, 21:48 #4
Цитата Сообщение от okman Посмотреть сообщение
а можете с программой помочь?
А ты объясни толком, что не получается?
0
okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 204
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>();
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 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;
}
1
okman
15 / 21 / 1
Регистрация: 05.04.2013
Сообщений: 204
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;
}
Спасибо, я что-то запамятовал
0
02.07.2013, 22:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2013, 22:28
Привет! Вот еще темы с ответами:

Использовать для работы с матрицами указатели и операции вида *p++, p++ - C++
Здравствуйте. снова обращаюсь к вам. Задание такое: Использовать для работы с матрицами указатели и операции вида *p++, p++ и т.д. Матрицы...

Зачем учить указатели, если можно использовать вектор? - C++
Не могу понять, зачем учить указатели если в большинстве случаев для выделения памяти намного легче использовать vector?

Для чего нужны и зачем использовать smart-указатели? - C++
В Страуструпе не нашел, кто подскжает где можно про них прочитать ?)

Определить максимальное количество одинаковых элементов массива, использовать функцию и указатели - C++
Помогите, пожалуйста, ОЧЕНЬ срочно нужно! Дано целочисленный массив размера N. Определить максимальное количество его одинаковых...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru