虽然这个话题已经被讨论了很多次,但我迄今还没有找到令人满意的答案。何时通过return返回函数中的数据或传递引用来更改地址上的数据?经典答案是在变量变得很大时(为了避免堆栈复制),将变量作为引用传递给函数。对于任何结构或数组等任何东西似乎都是这样。然而,从函数返回指针并不罕见。事实上,一些C库函数就是这样做的。例如:
char *strcat(char *dst, const char *src);
即使在出现错误的情况下,此函数始终返回指向目标的指针。在这种情况下,我们可以只使用传递的变量,不用管返回值(大多数情况下是这样做的)。
当查看结构时,我看到同样的情况发生。当函数仅需要在变量初始化中使用时,我经常返回指针。
char *p = func(int i, const char *s);
还有一个观点认为堆栈拷贝变量是昂贵的,应该使用指针代替。但是正如 这里 提到的那样,有些编译器可以自行决定(假设C语言也一样)。是否存在一般规则或至少有什么不成文的约定来决定使用其中之一?我重视性能胜过设计。
strcat
的例子适用于旧的API。新的替代方式返回错误代码:errno_t strcat_s( char *strDestination, size_t numberOfElements, const char *strSource )
。 - i486