2011-02-28 52 views
0

可能重複:
returning multiple values from a function函數是否可以返回兩個值?

我有必須返回兩個值

    return(&ptr->keys[pos].value) 
        return Duplicate; 

這裏& ptr->密鑰的函數[POS]。價值會給地址和Duplicate是一個枚舉值設置爲2 ...如何將這兩個值返回給另一個函數,insert_front是一個鏈接編輯列表& ptr-> keys [pos] .value用作鏈接列表的第一個地址。 應該寫什麼調用函數的原型?

+0

Peter Minchev的回答是正確的。你的將只返回第一條語句;遇到「返回」時,退出該功能。 – Hut8 2011-02-28 07:05:57

回答

4

您只能從函數返回一件東西。你可以創建一個包含你想要返回的所有東西的結構,或者你通過引用傳遞一些函數參數。

6

您不能返回兩個值。但是,您可以返回一個包含兩個值的結構的單個值。

1

要返回兩個值,您必須定義某種結構來保存這兩個值,並返回該結構的一個實例。或者,您可以將一個或兩個地址傳遞給該函數,並將其寫入該函數中。

0

像這樣:

typedef ret { 
    int val1; 
    int *val2; 
} ret_t ; 

// make sure to remember to free the struct when you're done with it 
ret_t *myFunc(void) { 
    ret_t *r = malloc(sizeof(ret_t)); 
    r->val1 = 1; 
    r->val2 = &r.val1; 

    return r; 
} 

// You can also return a copy of the struct on the stack 
ret_t myFunc(void) { 
    ret_t r; 
    r.val1 = 1; 
    r.val2 = &r.val1; 

    return r; 
} 
+0

你爲什麼使用malloc?使用堆棧返回2個整數更快,您不需要釋放返回的值。更多的錯誤是可以避免的:'r'必須是一個指針... – knivil 2011-02-28 07:17:38

+0

我的兩個返回值是不同的一個值返回一個int而另一個返回一個地址...... wht應該是我的結構成員數據類型,如果它必須保持地址。 – asir 2011-02-28 08:08:36

+0

@knivil:我展示了返回多個值的一般解決方案,這是一個結構。在這種情況下返回2個int可能會更快,但是如果他必須返回20個int呢? – 2011-02-28 08:52:09

0

不,你不能有一個函數的兩個返回後,第一回將退出,你需要創建一個對象的功能。注意:我很久沒有用C語言編寫代碼了,所以這裏的語法可能是關閉的。

public class link{ 
    private int& ptr; 
    private int Duplicate; 

    public constructor link() {} 

    public setPtr(int& ptr) { 
    this->&ptr = ptr; 
    } 

    //set duplicate function 

    //get ptr function 

    //get duplicate function 

} 

和在你片斷你張貼之前創建的設定值所需的鏈接對象,然後返回(鏈接對象)的功能;

+0

上面的typedef答案絕對是一個更好的解決方案。 – david 2011-02-28 07:12:15

+0

「我很長一段時間沒有用C語言編碼」......以至於忘記C不是對象,沒有class關鍵字:) – Raveline 2011-02-28 08:58:03

2

羅伯特的代碼是正確的。但是,您/可/也使用結構沒有malloc的,就像這樣:

struct retstruct { 
    int a; 
    int b; 
}; 
struct retstruct myfunc(void) { 
    struct retstruct r; 
    r.a = 1; 
    r.b = 2; 
    return r; 
} 

int main() 
{ 
    struct retstruct r; 
    r = myfunc(); 
    printf("a=%d b=%d\n", r.a, r.b); 
} 

這通常是避之唯恐不及,因爲它通常是一個有點更加昂貴(性能明智)路過周圍像這樣結構,但如果你只需要像這樣的一對值就足夠了。

1

在C/C++中,函數不能返回兩個值。但是,大多數情況下,這個限制實際上是有意義的:在任何複雜函數中,您都想更新一些數據(一堆變量,一個數組等),並返回函數的狀態,即它是成功還是不。其結果是,一個好的做法是,在這個例子中返回功能的狀態,並使用(在C++)或引用指針(C語言)來修改你的論點,就像在C:

int swap(int* a, int* b) 
{ 
    int tmp = *a; 
    *a = *b; 
    *b = tmp; 
    return 0; 
} 

中當然,這個功能太簡單失敗(在某種程度上),但你的想法:P

然後,如果你真的希望你的函數返回2倍的值,那麼你可以使用所提出的所有招數其他答覆者。

相關問題