这段代码我看不懂。我想我知道的是,当我传递 "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/