Изменение значения места в памяти с помощью указателей C ++

0

Привет, Word

У меня есть структура узла следующим образом.

typedef struct Node
{
    Node* left = nullptr;
    Node* right = nullptr;
    string word;
    int lineNumber = 0;
    int count = 0;
};

Цель здесь состоит в том, чтобы связать этот узел с другими узлами (я знаю очень простой), но мне, кажется, не хватает некоторых тонкостей, которые я могу игнорировать

Вот моя попытка

cout << "************Testing Root Node**********************\n" << endl;
        1   Node *newNode = new Node;       
        2   Node  temp = *newNode;
        3   temp.word = word;
        4   temp.lineNumber = lineNumber;
        5   wtree.setRoot(newNode); 


        6   Node temp2 = *newNode;
        7   cout << "Testing temp.word = " <<temp.word << endl;
        8   cout << "Testing temp2.word = " << temp2.word << endl;

        9  Node *test = wtree.getRoot();
        10  Node test2 = *test;

        cout << "RootNode.getWord() should be CATS it is...\n\n\ " << test2.word << endl;
        cout << "************End of Root Node Test******************\n\n\n\n" << endl;

Мой анализ

Я считаю, что строка 2 -4 неверна, но я просто не знаю, как ее исправить /

My output is this

Testing temp.word = cats
Testing temp2.word = _____(blank)
RootNode.getWord() should be CATS it is... _______ (blank)

Этот вывод говорит мне, что newNode не изменяется вообще. Поэтому мое temp.word = word не выполняет ожидаемое поведение.

Может ли кто-нибудь сказать мне, как я должен правильно справляться с этой ситуацией? заранее спасибо

Пожалуйста, дайте мне знать, если я не был ясен, и я с удовольствием предоставил более подробную информацию

Я также пробовал

*newNode.word = word 

Но это дало мне проблемы с компиляцией

Бонусный вопрос

Выполняет ли новый оператор то же самое, что и malloc?

Я новичок в C++, но я считаю, что это

  • 0
    This output tells me that the newNode is not being changed at all. Это потому, что вы нигде не изменяете newNode в своем коде, temp и temp2 инициализируются как копия newNode , изменение членов temp или temp2 не newNode . На ваш «бонусный» несвязанный вопрос есть несколько ответов.
Теги:
pointers
struct

2 ответа

1
Лучший ответ

temp - это копия newNode. Поэтому, когда вы присваиваете ему значения, вы не newNode.

Если вы хотите напрямую установить newNode, используйте следующее:

newNode->word = word;

Вам не нужны все эти копии (например, temp2), просто используйте -> для доступа к переменным-членам из указателей в структуры или классы.

Изменение: Бонусный вопрос: new похоже на malloc. Он выделяет память для объекта. Однако new также вызывает конструктор объекта, который позволяет объектам инициализировать себя.

  • 0
    Спасибо за четкий ответ
  • 0
    @RyanThomas Кстати, кажется, вы изначально думали об этих копиях как о ссылках . Хотя в этом случае это не требуется (использование методов доступа с указателями - Node & temp = *newNode способ), изменение объявлений на Node & temp = *newNode , Node & temp2 = *newNode и Node & test2 = *test также привело бы к тому, что вы были ожидая.
0

Node temp = * newNode; // Эта строка создает новый объект и не указывает на объект newNode

Если вы хотите отразить свои изменения в newNode, когда вы вносите изменения в temp, вы можете использовать ссылку

Node & temp = * newNode;

Таким образом, temp является псевдонимом newNode вместо совершенно нового объекта.

  • 0
    Огромное спасибо за этот новый самородок knowlegde

Ещё вопросы

Сообщество Overcoder
Наверх
Меню