【发布时间】:2019-11-22 16:39:03
【问题描述】:
这是一个递归函数,用于在 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);
}
}
【问题讨论】:
-
s + 1将指针移动一个字符。 -
int str_length(char s[])实际上是int str_length(char* s)。所以你有指针算术。 -
@wally 所以它调用 s[0+1] 然后 s[1+1] 等等?谢谢你的回答。
-
如果课程还没有涉及到指针,那么根据您在课程中学到的内容,您无法理解这个程序。在这种情况下,您不应该使用此示例代码。 (尝试按照说明编写自己的代码!)但是请注意,
char s[]是 用数组语法伪装的指针。您可以像使用数组一样使用它并编写迭代解决方案(而不是所示代码中的递归解决方案),但这在技术上是不正确的,恕我直言,应该在给出这样的分配之前教授指针。 -
标签: c++ recursion arguments c-strings