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

10-12 18:20