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

Передача в функцию по ссылке или указателю - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задача Создать массив структур, каждая из которых состоит из http://www.cyberforum.ru/cpp-beginners/thread1113797.html
Задача Создать массив структур, каждая из которых состоит из следующих элементов: факультет, курс, группа, фамилии студентов, экзаменационные оценки. Реализовать запросы, определив: 1)фамилии студентов, которые имеют две и больше двоек в сессию на заданном пользователем факультете и удалить их 2)факультет на котором на первом курсе наибольшее количество отличников. НЕ МОГУ СДЕЛАТЬ первое...
C++ Отлов нажатия клавиш Доброго времени суток! Стоит задача при нажатии оперделенной клавиши выполнить действие. Код: #include <windows.h> #include <iostream> #include <tchar.h> #include <conio.h> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread1113790.html
C++ Чтение бинарного кода из файла
Необходимо прочитать бинарный код, синтаксически разделённый на байты (Например: 01000010 00011100 01111011) из файла. С библиотекой fstream знаком, больше интересует корректное прочтение, ибо в переменную "закидывается" неправильное значение. Например вместо требуемых 00011001 может вылезти 64888811000. Заранее спасибо.
C++ Несколько cpp файлов в проекте
Доброго времени суток ! Есть проект и в нем 2 cpp файла: Main.cpp и BinaryNumber.cpp В последнем файле создан класс и его методы. Как теперь в Main.cpp воспользоваться этим, те создать объект типа BinaryNumber и повызывать его методы ? С++ только начал изучать :)
C++ Не понимаю вызовы http://www.cyberforum.ru/cpp-beginners/thread1113767.html
Абсолютно не понимаю вызовы. Учусь по книге Страуструпа. ... void print_square(int v); { cout<<v<<'\t'<<v*v<<endl; } int main() { for (int i=0;i<1000;i++) print_square(i);
C++ Метод итераций x*x*x+2*x+6*(log(2+10*sqrt(3)))=0 отрезок: Это сама задача, вот код программы: У меня такой вопрос, решабильно ли данное уравнение методом итераций, по заданию оно должно решатся. Но у меня получается, что в данном уравнении данный метод не сходится. Подскажите, что не так. P.здавал похожую тему в разделе "Численные методы", но там люди не сильно сильны в программировании, поэтому решил... подробнее

Показать сообщение отдельно
ArtVgd
 Аватар для ArtVgd
1 / 1 / 0
Регистрация: 13.11.2012
Сообщений: 23
08.03.2014, 01:11     Передача в функцию по ссылке или указателю
Гуру C++, как предпочтительнее делать?

C++
1
2
3
4
5
6
7
8
9
void f1(int &a)
{
      a = 5;
}
 
void f2(int * a)
{
      *a = 10;
}
Как я понимаю - и там, и там в функцию передаётся значение адреса переменной.
Просто я делаю бинарное дерево, и есть два варианта реализации метода удаления (оба работают)

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
56
57
typedef Node* pNode;
 
void Tree::del(pNode * node, int value)
{
    if (value > (*node)->key && (*node)->right != nullNode)
    {
        del(&(*node)->right, value);
    }
    else if (value < (*node)->key && (*node)->left != nullNode)
    {
        del(&(*node)->left, value);
    }
    else if (value == (*node)->key)
    {
        if ((*node)->left == nullNode && (*node)->right == nullNode)
        {
            delete * node;
            *node = nullNode;
        }
        else if ((*node)->left == nullNode && (*node)->right != nullNode)
        {
            (*node)->key = (*node)->right->key;
            Node temp = *(*node)->right;
            delete (*node)->right;
            (*node)->left = temp.left;
            (*node)->right = temp.right;
        }
        else if ((*node)->left != nullNode && (*node)->right == nullNode)
        {
            (*node)->key = (*node)->left->key;
            Node temp = *(*node)->left;
            delete (*node)->left;
            (*node)->left = temp.left;
            (*node)->right = temp.right;
        }
        else if ((*node)->left != nullNode && (*node)->right != nullNode)
        {
            if ((*node)->right->left == nullNode)
            {
                (*node)->key = (*node)->right->key;
                Node temp = *(*node)->right;
                delete (*node)->right;
                (*node)->right = temp.right;
            }
            else
            {
                Node * temp = getNodeWithoutLeft((*node)->right);
                (*node)->key = temp->key;
                del(&temp, temp->key);
            }
        }
    }
    else
    {
        cout << "Node with value " << value << " not found." << endl;
    }
}
И такой:
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
void Tree::del(Node * &node, int value)
{
    if (value > node->key && node->right != nullNode)
    {
        del(node->right, value);
    }
    else if (value < node->key&& node->left != nullNode)
    {
        del(node->left, value);
    }
    else if (value == node->key)
    {
        if (node->left == nullNode && node->right == nullNode)
        {
            delete node;
            node = nullNode;
        }
        else if (node->left == nullNode && node->right != nullNode)
        {
            node->key = node->right->key;
            Node temp = *node->right;
            delete node->right;
            node->left = temp.left;
            node->right = temp.right;
        }
        else if (node->left != nullNode && node->right == nullNode)
        {
            node->key = node->left->key;
            Node temp = *node->left;
            delete node->left;
            node->left = temp.left;
            node->right = temp.right;
        }
        else if (node->left != nullNode && node->right != nullNode)
        {
            if (node->right->left == nullNode)
            {
                node->key = node->right->key;
                Node temp = *node->right;
                delete node->right;
                node->right = temp.right;
            }
            else
            {
                Node * temp = getNodeWithoutLeft(node->right);
                node->key = temp->key;
                del(temp, temp->key);
            }
        }
    }
    else
    {
        cout << "Node with value " << value << " not found." << endl;
    }
}
Второй, как-то попроще выглядит. Как вообще лучше делать, по ссылке передавать или по указателю?
В случае с деревьями - указатель на указатель или ссылку на указатель?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru