strrev()中返回值的用途是什么?

时间:2015-06-02 07:24:00

标签: c

strrev()的返回值有什么用?即使在反转字符串后,该值也会在给定的字符串中被修改。

Ex:char *strrev(char *src);在字符串反转之后,输出将出现在src中。在那种情况下,返回字符串的用途是什么?

返回值或我们传递的字符串也充当输出,这就足够了。在这种情况下,使用strrev()的返回值是什么?

2 个答案:

答案 0 :(得分:5)

允许链接。

想象一下,你想要反转一个字符串,然后再将其反转(设想的例子,但它确定了这一点)。使用链接,您可以执行此操作:

strrev(strrev(charBuffer));

如果sttrev返回void,您必须执行以下操作:

strrev(charBuffer);
strrev(charBuffer);

得到相同的结果。

正如@WernerHenze在评论中所说,它还允许您直接使用函数调用中的输出,如下所示:

printf("%s\n", strrev(charBuffer));

链接的可能性基本上为程序员提供了关于代码结构的更多灵活性。

答案 1 :(得分:0)

链接更有意义,但它也可用于不太可能的微优化。您可以避免在呼叫期间在堆栈上保存临时值。例如:

char *fn(char *s) {
  strrev(s);
  strlwr(s);
  return strstr(s, "secret");
}

通过对strrev()strlwr()的来电,您需要保留s的安全副本以供后续使用。您可以使用以下方法删除此寄存器:

char *fn(char *s) {
  s = strrev(s);
  s = strlwr(s);
  return strstr(s, "secret");
}

根据链接答案,您还可以使用:

char *fn(char *s) {
  return strstr(strlwr(strrev(s)), "secret");
}

但在更复杂的代码中,这可能是一个问题。

我刚尝试了它,它消除了三条mov指令。耶!!