C++ 在递归函数中覆盖函数参数?

C++ 在递归函数中覆盖函数参数?,c++,function,recursion,parameters,assign,C++,Function,Recursion,Parameters,Assign,所以我有一个类,它有一个以下类型的受保护指针成员 int *assigntoThis; // In the constructor I have initialized this to NULL. 我还有一个与下面声明相同的类的公共递归成员函数 bool find(int* parent, std::string nameofnode, int* storeParentinThis); 递归函数检查子节点,如果子节点的名称与作为参数传入的字符串匹配,它将为storeParentinThis分

所以我有一个类,它有一个以下类型的受保护指针成员

int *assigntoThis; // In the constructor I have initialized this to NULL.
我还有一个与下面声明相同的类的公共递归成员函数

bool find(int* parent, std::string nameofnode, int* storeParentinThis);
递归函数检查子节点,如果子节点的名称与作为参数传入的字符串匹配,它将为storeParentinThis分配父节点的地址

这就是我从同一类的另一个函数调用函数的方式

bool find(root, "Thread", assigntoThis);
但是,在运行时,当我输出存储在assigntoThis中的值时,我得到00000000=NULL。如何在递归函数中更改assigntoThis的值?

更改为:

bool find(int* parent, std::string nameofnode, int*& storeParentinThis);
说明:

以下是原始代码的简化版本:

foo (int* p) { /// p bahaves as a local variable inside foo
  p = 1;  
}    
int* p = 0;
foo(p);
// here p is still equal 0
这实际上类似于以下代码:

foo (int i) {
  i = 1;  
}    
int i = 0;
foo(i);
// here i is still equal 0
我认为这更容易理解

因此,如果我们想从函数返回某个内容,我们必须创建指向它的指针或对它的引用,并举例说明:

foo (int* i) { // pointer example
  *i = 1;  
}    
int i = 0;
foo(&i);
// here i is equal to 1

foo (int& i) { // using reference example
  i = 1;  
}    
int i = 0;
foo(i);
// here i is equal to 1
现在很容易将其应用到您的案例中:

// pointer example
bool find(int* parent, std::string nameofnode, int** storeParentinThis) {
    *storeParentinThis = parent;
}

// reference example
bool find(int* parent, std::string nameofnode, int*& storeParentinThis) {
     storeParentinThis = parent;
}
改为:

bool find(int* parent, std::string nameofnode, int*& storeParentinThis);
说明:

以下是原始代码的简化版本:

foo (int* p) { /// p bahaves as a local variable inside foo
  p = 1;  
}    
int* p = 0;
foo(p);
// here p is still equal 0
这实际上类似于以下代码:

foo (int i) {
  i = 1;  
}    
int i = 0;
foo(i);
// here i is still equal 0
我认为这更容易理解

因此,如果我们想从函数返回某个内容,我们必须创建指向它的指针或对它的引用,并举例说明:

foo (int* i) { // pointer example
  *i = 1;  
}    
int i = 0;
foo(&i);
// here i is equal to 1

foo (int& i) { // using reference example
  i = 1;  
}    
int i = 0;
foo(i);
// here i is equal to 1
现在很容易将其应用到您的案例中:

// pointer example
bool find(int* parent, std::string nameofnode, int** storeParentinThis) {
    *storeParentinThis = parent;
}

// reference example
bool find(int* parent, std::string nameofnode, int*& storeParentinThis) {
     storeParentinThis = parent;
}

为了将来的参考,这里是这个问题背后的推理线索,为了将来的参考,这里是这个问题背后的推理线索