strrev()
的返回值有什么用?即使在反转字符串后,该值也会在给定的字符串中被修改。
Ex:char *strrev(char *src);
在字符串反转之后,输出将出现在src中。在那种情况下,返回字符串的用途是什么?
返回值或我们传递的字符串也充当输出,这就足够了。在这种情况下,使用strrev()
的返回值是什么?
答案 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
指令。耶!!