2012-06-08 27 views

回答

9

因爲這就是語言的定義方式。沒有根本原因;其他語言可以返回多個值(例如Matlab)。

作爲「解決辦法」,你可以返回一個包含多個字段一個struct。

+0

你也可以傳入一個指針並從你的函數中修改它。 –

+0

由於我們可以將多個變量傳遞給函數,變量將在堆棧中創建空間。那麼爲什麼我們不能返回多個變量。如果它從堆棧或一些內存返回? – kapilddit

+2

@kapilddit:因爲這是定義的語言。 –

3

您可以完全由將它們放入一個結構「返回」超過1項,或指針傳遞給函數,這樣函數可以編寫持續的函數返回之後一定價值。

1

你不能在同一時間返回多個值。因爲返回函數的語法被定義爲只能接受一個值。檢查下面的例子。

a=returnfunction(); 

在上述情況下,如果功能returnfunction()返回一個以上的值,則編譯器會很困惑來初始化該返回值的變量a。如果函數returnfunction()返回兩個值1和2,那麼編譯器會將值1或2分配給變量a時感到困惑。所以爲了防止這些類型的問題,函數被定義爲不返回多個值。

+0

在這種情況下,您可以使用兩個變量來獲取返回值。像論點 – kapilddit

+0

但你的觀點仍然有效。 – kapilddit

0

相反,它是如何表達的,沒有價值實際上得到「返回」。 實際上,返回值/地址作爲堆棧中的參數傳遞給函數調用。然後,return語句實際上修改了該參數,從而將結果傳遞給調用者。

從某種意義上說,這幾乎就像void func(arg1, arg2, *ret)

不同的語言,不同的方式處理這個。 C預計棧中只有一個「返回」參數。事實上,結構會讓你「返回」多個值,所以將指針傳遞給一個結構作爲一個正常的參數也是如此。

+0

現代CPU/ABI是真的嗎? – Austin