关于C语言函数参数与返回值的抉择?

取决于你返回的结构体的位置,如果你打定主意你修改后的结构体只会出现在堆里,而且你文档里写明白了说“如果返回值不为空,一定要记得调用free()去释放它“,那么就返回指针。如果你修改后的结构也可能会出现在栈里面,那么就用指针做参数把地址传进来。我个人总是喜欢做为参数传进来的,这样的话这段内存的分配会在处边,不会被这个函数”藏起来“。符合”一个函数只干一件事儿“的原则,也方便于贯彻”谁分配内存,谁负责释放!“的原则。
■网友
因为C没有正常的数组,所以“产生一个新的数组并返回”就不可能啦,这个时候就只能预先分配让用户传入啦,C风格字符串也是一个道理。同样,因为没有内建的tuple,所以“返回两个值”就不可能啦,解决办法是自己造一个结构,比如div_t,或者把其中一个放到参数上,比如modf()或者stdtol()。其它情况下直接返回就好啦。不过较大的结构的复制为了避免开销通常也把它变成参数。
■网友
这个取决于你的设计模型对资源的分配方式,题主说的是常用的两种方式。1. 将指针传入,是一种帮我做什么事的方式,就像是去干洗店洗衣服。调用此函数的一方是资源的owner2. 返回一个结构体指针,是一种给我某种特定资源的方式, 就像是去服装店买衣服。调用者通过函数调用获得新的资源并成为owner需要注意的是,如果第二种方式是动态分配资源的,使用者owner必须负责回收这种资源(free)。如果设计中的模型要求资源恒定不变,就应该使用第一种,参数传递指针。如果要求通过此函数分配新资源,就适合使用第二种。
■网友
两种方式都应该支持可以参考一下c标准库里一些函数的实现比如 字符串copychar * strncpy ( char * destination, const char * source, size_t num );带返回值可以增加编码灵活性如支持链式表达,给调用者更多的选择stackoverflow.com 的页面
■网友
当参数传进去比较好,作为返回值会产生额外的存储空间


    推荐阅读