为什么这样做? C ++中的递归str_length函数

这是一个递归函数,用于在c ++中查找cstring的长度。我很高兴找到该项目问题的答案,但我不知道它为什么起作用。问题所在的行是这一行:“ return(str_length(s + 1)+ 1);” 我不理解为什么s + 1作为自变量起作用。任何澄清将是可爱的。

编辑 本课程没有涵盖指针。

int str_length(char s[])
{
    if (s[0] == 0)
    {
        return 0;
    }
    else
    {
        return (str_length(s + 1) + 1);
    }
}
tanyuran 回答:为什么这样做? C ++中的递归str_length函数

char s[]在函数参数中使用时实际上是char* s,即指向char的指针,而不是char的数组。这是一个令人困惑的符号,这就是为什么我建议不要使用它。

传递给该函数的是指向char数组的第一个元素的指针,该函数的工作是在该数组中找到值为'\0'的第一个字符并将其返回元素在数组中的位置。

在编写s + 1时,您将在s所指向的数组元素之后形成一个指向数组元素的指针。然后,将其传递给对str_length的递归调用。

由于递归调用现在需要一个指针,该指针指向包含C样式字符串的原始char数组的第二个元素,因此它将返回原始字符串的长度减去1。在(str_length(s + 1) + 1)中的结果中添加一个将返回实际字符​​串的长度。

本文链接:https://www.f2er.com/3049401.html

大家都在问