1

可能重复:
C Treenode 指针使用全局变量更改值

我有一个程序正在创建一个充满各种位的节点树(它实际上是一个递归下降解析器)。无论如何,当我走到最后时,我将一个指针分配给我的程序当前所在的第一个“令牌”。我将该节点的“子节点”分配为等于包含作为令牌的数据的新节点。

所以,然后我的程序继续。也就是说,它将全局“令牌”更改为下一个值。

然后我遇到的问题是指向适当数据的树节点现在也发生了变化。

也就是说,假设程序正在标记一个像这样的简单字符串。

firstvar = 1

所以,最初这棵树说program->assignStmt->{identifier; firstvar}

但是随后,程序转到下一个标记,所以现在当前的全局标记是{assignment; =},而不是 assignStmt 树节点继续具有值{identifier; firstvar},它现在具有值{assignment; =}。指针没有保留值!

希望这是你们可以在逻辑上指出我的东西。

编辑(下午 2 点 30 分):: OKAY ... 这是一些代码

typedef struct node {
    TOKEN *data;

    struct node *child1, *child2, *child3, *child4, *parent;

} node;

TOKEN *token;
Symbol sym;
struct node *root;

void getsym() 
{
    token = getNextToken();
    sym = token->sym;
}

int main()
{
    getsym();
    //So, right now, from getsym() the global token has the value {identifier; firstvar} 

    struct node* tempNode;
    tempNode = (struct node*) calloc(1, sizeof(struct node));
    tempNode->child1 = tempNode->child2 = tempNode->child3 = tempNode->child4 =  NULL;
    tempNode->data = token;

    getsym();
    //BUT NOW from getsym() the global token has the value {assignment; =}, and 
    //subsequently the tempNode->data has changed from what it should be 
    //{identifier; firstvar} to what the global token's new value is: {assignment; =}

}
4

0 回答 0