我在接受采访时被告知如何从功能中返回多个值。我已经回答说通过使用指针我们可以在C中实现(通过引用调用)。然后他告诉我他正在寻找一些返回多个值的方法。我说我们可以返回一个struct对象,但在这里他也似乎没有留下深刻的印象。
我想知道其他方法从函数返回多个值。
我已经在SO上看到了这个问题,但找不到任何特定的C语言。
答案 0 :(得分:27)
棘手的问题是,面试官有一些他们特别满意的解决方案,他们可能会根据你是否有同样聪明的伎俩给你评分。
你可以用你所做的几种方式命名,但仍然不会落在他们的秘密伎俩上。如果你知道他们的秘密技巧,你就不会对它印象深刻。
所以在这些情况下,它会把它从面试变为对话。一旦你发现你没有朝着他们的自我移动,你可以避免走向令人生畏的“我不知道”“我放弃”,而是尝试“所以你有任何聪明的解决方案吗?是否有 - Xyz Inc的食谱配方?“等
任何对他们明显自我印象深刻的解决方案的一瞥,你回到坚实的基础上,你可以谈论它,并询问他们是否考虑过各种因素,并且基本上采访了它们。
每个人都喜欢一个好的倾听者,让他们谈论他们的技巧是让他们离开面试的好方法,让你印象深刻! ;)
答案 1 :(得分:1)
有几种方法:
答案 2 :(得分:1)
这取决于您认为值的内容。如果值是您的一条信息,更多值可以是值的结构。更多的值也可以通过指针或数组传递,甚至是包含(非零字母数字)值列表的char*
。如果您将某个值视为一些信息,则返回的uint32_t
可能会包含32个值。你甚至可以乱用信号或插座或管道或文件。
但是你甚至不知道用例及其对解决方案的要求,提出 正确的解决方案确实是一项相当艰巨的任务(而你实际上做了提出了一些适当的解决方案......)。
答案 3 :(得分:0)
返回指向结构的指针,或将几个小数据类型打包成一个大型数据类型,或使用全局变量。
第一种可能是最干净的方式,其他两种可能在某些情况下有用。
如果我们传递地址而不是参数的真值 然后,无论何时我们引用这些参数,我们都会使用地址。
答案 4 :(得分:0)
返回指向结构的指针是合适的答案。(显然,程序的目标可以决定什么是最好的)。面试官可能希望你说'我不知道'哪个会表明你对这个领域缺乏信心。我认为你提供了很好的解决方案,但不是他心中的想法。您可以向他询问一个典型的情况,他希望返回多个值,然后讨论struct-pointer如何是一个合理的替代方案。