我不能理解这个代码段。我想我知道的是,当我传递"abc"
时,x
就变成了指向字符串中第一个元素的指针,对吗?为什么它给了我无限的循环?
这是我的代码:
void foo1(char* x)
{
if (!x)
return;
printf("%c ",*x);
foo1(++x);
}
int main()
{
foo1("abc");
return 0;
}
最佳答案
当指针变为null
时停止迭代。实际需要的是在到达\0
字符(即字符串的结尾)时停止迭代:
int main()
{
foo1("abc");
return 0;
}
void foo1(char* x)
{
if (*x == 0)
return;
printf("%c ",*x);
foo1(++x);
}
因为您迭代的是指针值,而不是指向的项,所以基本上您将开始迭代进程地址空间,从字符串的位置开始。在到达导致分段错误的无效地址之前,可能会耗尽堆栈空间!
关于c - 调用递归函数时出现无限循环,即使使用基本情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48299883/