gpt4 book ai didi

C Treenode 指针用全局变量改变值

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:10 27 4
gpt4 key购买 nike

所以,这是故事。我正在尝试创建一个递归下降解析器,它标记一个字符串,然后从这些标记中创建一个节点树。

我的主要类(class)的所有指针都在工作......如果你之前使用过 RDP 那么你知道我在说什么程序 -> 语句 -> assignStmt...等。这个想法是程序节点有一个指向语句节点的子节点,等等。

问题来了。当我到达树节点的末尾时,我指向的是分词器从字符串创建的实际分词。

所以,假设字符串是:

 firstvar = 1;

在这种情况下,有 4 个标记 [{id} firstvar]、[{assignment} =]、[{number} 1]、[{scolon}]

我希望我的 assignStmt 节点指向该语句的非装饰器部分..即,assignStmt 的 child1 将是 [{id} firstvar],child2 将是 [{number} 1]...

然而。当我将 child1 分配给 [{id} firstvar],然后继续处理下一个标记时,child1 的值会随着我向前移动而改变。因此,如果我将我的全局标记更改为下一个标记(在本例中为 [{assignment} =] ),那么 assignStmt 的 child1 也会随之更改。

这是为什么?我能做些什么?!谢谢你!

TOKEN* getNextToken(void); 
//only shown here to you know the return... it's working properly elsewhere

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; =}

}

最佳答案

由于我的声誉不佳,我无法对此发表评论,因此我将添加这个答案,如果理解了您的问题,您可能正在传递一个指向函数的指针,而问题是您可能需要一个指向指针的指针只是一个指针。

在 C 中,当您将值传递给函数时,您是按值而不是按引用传递它们,这意味着该函数会创建该参数的本地副本,并且它只能使用该本地副本,问题在于所有更改只会影响本地副本,当函数终止时,如果您不正确处理,所有更改都将丢失。

关于C Treenode 指针用全局变量改变值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12828477/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com