如何通过C中的函数返回多个值?

我在接受采访时被问到如何从function中返回多个值。 我已经回答说通过使用指针,我们可以在C中实现(通过引用调用)。然后他告诉我他正在寻找一些返回多个值的方法。 我说我们可以返回一个struct对象,但在这里他也似乎没有留下深刻的印象。

我想知道其他方法从函数返回多个值。

我已经在SO上看到了这个问题,但找不到任何具体的C语言。

棘手的问题是面试官有一些他们特别满意的解决方案,他们可能会根据你是否拥有与他们相同的聪明伎俩来评分。

你可以用你所做的几种方式命名,但仍然没有落在他们的秘密技巧上。 如果你知道他们的秘密技巧,你就不会对它印象深刻。

因此,在这些情况下,它将其从面试转变为对话。 一旦你发现你没有朝着他们的自我移动,你可以避免走向令人生畏的“我不知道”“我放弃”,而是尝试“所以你有任何聪明的解决方案吗?是否有 – Xyz Inc的食谱配方?“ 等等

对他们明显自我印象深刻的解决方案的任何一瞥,你回到坚实的基础上,你可以谈论它,并询问他们是否已经考虑了各种因素,并且基本上采访了他们。

每个人都喜欢一个好的倾听者,让他们谈论他们的技巧是一个很好的方式让他们离开面试,给你留下深刻的印象! ;)

有几种方法:

  1. 使用return语句返回值(如您所知)
  2. 通过参考返回。
  3. 通过堆返回值。
  4. 通过全局变量返回值。

这取决于你认为的价值 。 如果值是您的一条信息,则更多值可以是的结构。 更多的值也可以通过指针或数组传递,甚至包含一个(非零字母数字) 列表的char* 。 如果您将某个值视为一些信息,则单个返回的uint32_t可能包含32个 。 你甚至可以搞乱信号或sockets或管道或文件。

但是对于你甚至不知道用例及其对解决方案的要求,提出正确的解决方案确实是一项相当艰巨的任务(实际上你确实想出了一些合适的解决方案……)。

返回指向结构的指针,或将几个小数据类型打包成一个大型数据类型,或使用全局变量。
第一种可能是最干净的方式,其他两种可能在某些情况下有用。

如果我们传递地址而不是参数的真值。
然后,无论何时我们引用这些参数,我们都会使用地址。

返回指向结构的指针是合适的答案。(显然,程序的目标可以决定什么是最好的)。 面试官可能希望你说’我不知道’哪个会表明你对这个领域缺乏信心。 我认为你提供了很好的解决方案,但不是他心中的想法。 你可以问他一个典型的场景,他想要返回多个值,然后讨论struct-pointer是一个合理的替代方案。