2011-11-24 47 views
7

我在採訪中被問及如何從函數返回多個值。我回答說,我們可以通過使用指針來實現(通過引用來調用)這個指針。然後他告訴我他正在尋找其他方式來返回多個值。我說我們可以返回一個結構對象,但在這裏他似乎也沒有留下深刻的印象。如何通過C中的函數返回多個值?

我想知道其他方法從函數返回多個值。

我看到這個問題在這裏被問到SO,但找不到任何C具體。

+0

除非面試者想要數組(但只能返回相同類型的值),否則結構和指針是返回多個值的唯一方法。 –

+0

僅僅因爲面試官似乎對你返回一個結構(裏面有多個值)的答案似乎並不感冒,並不意味着它不是一個好的答案。是的,還有其他的方法,但是對於C++來說**結構的返回**是一個很好的答案。如果你能夠「返回」一個數組,那麼它會很好,但是在C中,你可以做的最好的事情就是返回一個指針,與C++不同的是你可以返回'std :: vector'。 「 –

+0

」似乎沒有留下深刻的印象「......只是沒有留下深刻印象,還是他告訴你,你是明顯錯誤的,並沒有回答他的問題? – Bart

回答

27

棘手的問題是,面試官有一些解決方案,他們特別滿意,他們可能會通過你是否擁有同樣的聰明把戲來給你分級。

你可以只說出幾個方法,如你所做的,但不會落在他們的祕密把戲上。如果你知道他們的祕密伎倆,你可能不會對它印象深刻。

所以在這些情況下,它將其從面試變爲談話。一旦你發現自己並沒有走向自我,你可以避免走向那些令人畏懼的「我不知道」「我放棄」,而是嘗試「那麼你有沒有什麼聰明的解決方案?這是在Xyz公司的房子食譜?「等等。

看到他們明顯自我印象深刻的解決方案,你又回到了堅實的基礎上,你可以談論它並詢問他們是否考慮過想到的各種因素,並基本採訪他們。

每個人都喜歡一個好的傾聽者,讓他們談論他們的竅門是讓他們離開面試的好方法,給你留下深刻的印象! ;)

+0

優秀的答案。始終認識到技術面試不僅僅涉及技術主題。 – wallyk

+4

最佳間接答案! – MByD

+2

在面試中,回答問題以澄清問題非常重要,將抽象和模糊問題/任務轉化爲具體的可回答/可行問題/任務。同樣,你可能會發現自己處理的是過於嚴格的限制,在那一刻,思考和問問他們是否可以放鬆,也許是以其他一些代價,這是一件好事。最糟糕的是做出錯誤的假設,因此無法給出好的或任何答案。如果面試官拒絕提供細節,您可以列舉可能性並獨立解決。它會顯示你的想法。 –

1

有幾種方法:使用

  1. 返回值return語句(如你已經知道),通過引用
  2. 返回。
  3. 通過堆返回值。
  4. 通過全局變量返回值。
+0

但是如何使用return語句我可以返回多個值? –

+0

@AmitSinghTomar:面試官可能意味着一種普通的「返回」,因爲在C中,只能用return來返回一個值。 –

0

返回指向結構的指針,或者將幾個小數據類型打包成一個大數據類型,或者使用全局變量。
第一種可能是最乾淨的方法,另外兩種可能在某些情況下使用。

如果我們傳遞地址而不是參數的真實值。
然後,無論何時我們引用這些參數,我們都會使用該地址進行操作。

1

這取決於你認爲。如果一個值是你的一條信息,更多值可能是一個值的結構。更多的值也可以通過指針或數組傳遞,即使是包含(非零字母數字)值列表的列表的char*。如果您認爲某個值只是一些信息,則返回的單個uint32_t可能包含32 。你甚至可能會弄亂信號或套接字或管道或文件。

但你甚至不知道該用例和它規定的解決方案的需求,它的確是一個相當艱鉅的任務,拿出合適的解決方案(和你實際沒有想出一些適當的解決方案...)。

0

返回一個指向結構的指針是合適的答案(很明顯,程序的目標可以決定什麼是最好的)。面試官可能希望你說'我不知道',這會顯示你對這個領域缺乏信心。我認爲你提供了很好的解決方案,但不是他想到的。你可以問他一個典型的場景,他想要返回多個值,然後討論結構指針是一個合理的選擇。