使用指针C ++更改内存位置的值

时间:2014-09-16 00:16:38

标签: c++ pointers struct

Hello 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 =字不是我所期望的行为。

有人可以告诉我应该如何妥善处理这种情况? 提前致谢

如果我不清楚,请告诉我,我很乐意提供更多详情

我也尝试了

*newNode.word = word 

但这给了我编译问题

加分问题

new运算符是否与malloc做同样的事情?

我对C ++很新,但我相信它确实

2 个答案:

答案 0 :(得分:1)

tempnewNode副本。因此,当您为其指定值时,您不会影响newNode

如果要直接设置newNode,请使用以下内容:

newNode->word = word;

您不需要所有这些副本(例如temp2),只需使用->从指向结构或类的指针访问成员变量。

编辑:奖金问题: newmalloc类似。它为对象分配内存。但是,new也调用对象的构造函数,它允许对象自己初始化。

答案 1 :(得分:0)

节点temp = * newNode; //这一行是创建一个新对象而不是指向newNode

的对象

如果要在对temp进行更改时反映对newNode的更改,可以使用reference

Node&amp; temp = * newNode;

通过这种方式,temp是newNode的别名而不是全新的对象。