我想知道从函数中返回多个值的其他方法。我已经看到这些问题在Stack Overflow上被提出,但没有找到任何与C语言特定相关的内容。
这个棘手的问题在于,面试官心中可能有某种特别满意的解决方案,并且他们很可能会根据你是否和他们一样聪明地想到相同的巧妙方法来评分。
你可以像你所做的那样列举几种方式,但仍然未必能想到他们的秘密技巧。而如果你知道了他们的秘密技巧,你可能并不会对它感到印象深刻。
因此,在这些情况下,把它从面试变成谈话是很重要的。一旦你发现自己没有朝着他们的自负前进,你就可以避免走向令人畏惧的“我不知道”、“我放弃了”,而是尝试“你有没有什么聪明的解决方案?在Xyz公司内部是否有配方?”等。
任何看到他们显然自我感觉良好的解决方案的线索,你都可以回到稳固的地面,在那里你可以谈论它,并问他们是否考虑了各种想到的因素,基本上是面试他们。
每个人都喜欢一个好的倾听者,让他们谈论他们的技巧是一个让他们对你印象深刻的好方法!;)
有几种方法:
return
直接返回一个值。 - Alexey Frunze这取决于你如何定义 值。如果对于你而言,一个值是一个信息片段,更多的值可以是一组值的结构体。更多的值也可以通过指针或数组传递,甚至是包含一系列(非零字母数字)值的char*
。如果你把一个值看作是一小段信息,那么单个返回的uint32_t
就可以容纳32个值。你甚至可以混合使用信号、套接字、管道或文件。
但是由于你不知道用例和需求对解决方案所施加的限制,想要提出正确的解决方案确实是一项相当困难的任务(虽然你确实提出了一些适当的解决方案...)。
返回结构体指针是合适的答案。(显然,程序的目标可以决定最好的做法)。面试官可能希望你说“我不知道”,这将显示出你在该领域缺乏信心。我认为你提供了很好的解决方案,虽然不是他所想要的。你可以问他一个典型的场景,他想要返回多个值,然后讨论如何使用结构体指针作为合理的替代方案。
返回一个指向结构的指针,或将几个小的数据类型打包成一个大的数据类型,或使用全局变量。
第一种方法可能是最清晰的方法,其他两种方法在某些情况下可能有用。
如果我们传递参数的地址而不是真实值。
那么每当我们引用这些参数时,都要使用该地址。
std::vector
。 - Ray Toal