为什么这样做有效?c+中的递归str#u长度函数+; 这是一个递归函数,用于查找C++中的cStand长度。我很高兴我找到了项目问题的答案,但我不知道为什么它会起作用。有问题的一行是:“return(stru-length(s+1)+1);”我不明白s+1作为参数为什么有效。任何澄清都很好

为什么这样做有效?c+中的递归str#u长度函数+; 这是一个递归函数,用于查找C++中的cStand长度。我很高兴我找到了项目问题的答案,但我不知道为什么它会起作用。有问题的一行是:“return(stru-length(s+1)+1);”我不明白s+1作为参数为什么有效。任何澄清都很好,c++,recursion,arguments,c-strings,C++,Recursion,Arguments,C Strings,编辑 本课程未涉及指针 int str_length(char s[]) { if (s[0] == 0) { return 0; } else { return (str_length(s + 1) + 1); } } char s[]在函数参数中使用时实际上是char*s,即指向char的指针,而不是char的数组。这是一个令人困惑的符号,这就是为什么我建议不要使用它 传递给函数的是指向char数组的第一个元素

编辑 本课程未涉及指针

int str_length(char s[])
{
    if (s[0] == 0)
    {
        return 0;
    }
    else
    {
        return (str_length(s + 1) + 1);
    }
}

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

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

写入
s+1
时,将在
s
指向的数组元素之后形成一个指向该数组元素的指针。然后将其传递给递归调用
str\u length


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

s+1
将指针移动一个字符。
int-stru-length(char s[])
实际上是
int-stru-length(char*s)
。所以你有指针算术。@wally,那么它调用s[0+1],然后调用s[1+1],依此类推?谢谢你的回答。如果本课程还没有涵盖指针,那么根据你在本课程中所学的内容,到目前为止你无法理解本课程。在这种情况下,不应使用此示例代码。(试着按照说明编写自己的!)但是请注意,
chars[]
是一个用数组语法伪装的指针。您可以像使用数组一样使用它并编写迭代解决方案(而不是像代码中所示的递归解决方案),但这在技术上是不正确的,在给出这样的赋值之前,应该教授IMHO指针。除此之外,还应该教您如何使用
std::string
,而不是C样式的以空结尾的字符串,如果你应该学习C++而不是C。