这是一个递归函数,用于在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);
}
}
答案 0 :(得分:0)
char s[]
在函数参数中使用时实际上是char* s
,即指向char
的指针,而不是char
的数组。这是一个令人困惑的符号,这就是为什么我建议不要使用它。
传递给该函数的是指向char
数组的第一个元素的指针,该函数的工作是在该数组中找到值为'\0'
的第一个字符并将其返回元素在数组中的位置。
在编写s + 1
时,您将在s
所指向的数组元素之后形成一个指向数组元素的指针。然后,将其传递给对str_length
的递归调用。
由于递归调用现在需要一个指针,该指针指向包含C样式字符串的原始char
数组的第二个元素,因此它将返回原始字符串的长度减去1。在(str_length(s + 1) + 1)
中的结果中添加一个将返回实际字符串的长度。