我最近开始在我的 C++ 类中进行递归,我想知道认为变量的范围对于特定堆栈帧是局部的是否正确:
3) return
2) flipString(" "); begin = a, end = t
1) flipString(at); begin = s, end = r
所以当它到达 return 语句时,它将弹出 第三帧关闭,
然后第二帧关闭 s = t + ""+ a
然后是 s = r + at + s 的第一帧,因此反转了字符串。
void flipString(string &s)
{
if (s.size() < 2)
{
return;
}
else
{
string begin;
string end;
begin = s.at(0);
end = s.at(s.size()-1);
s.erase(s.begin());
s.erase(s.end()-1);
flipString(s);
s = end + s + begin;
}
return;
}
最佳答案
是的,您对函数工作原理和函数本身的看法似乎是正确的。
在函数的每次调用中,局部变量 begin 和 end 都有一个不同的实例,放在堆栈上。
函数参数 s 引用或指向所有堆栈帧中的相同字符串,因为它是一个引用。
如果传递一个普通函数参数(没有引用也不是指针),那么在每个调用堆栈级别也会有该参数的单独拷贝。
关于c++ - 我对递归函数中变量如何工作的理解是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44125793/