2012-01-05 59 views
0

我有一個函數:與非默認類型的函數的返回值

*Foo* create_foo(); 

其中foo是多領域的結構:

typedef struct foo { 
    int progr_num; 
    char* size; 
    char* account; 
    int matric_num; 
    int codex_grp; 
    char* note; 
} Foo; 

什麼是恰好返回這個值函數時,我稱之爲?

功能:

Foo create_foo() { 
    Foo x; 
    ... 
    ... 
    return x 
} 

我知道,返回類型爲富,但如果我調用函數,並要測試的返回值,這是正確的值? (例如,如果函數是int類型,則返回值爲0或-1)。

當我調用函數什麼是返回正確的值?

例如:

int main() { 
    Foo foo_check; 
    foo_check = create_foo(); 
    if(!foo_check) 
    return ... **???** 
} 
+0

那麼,根據你的解釋函數返回一個結構體。您需要通過「測試」返回值(即結構)來解釋您的意思。 – NPE 2012-01-05 15:58:09

+0

你是什麼意思「(例如,如果一個函數是一個int類型,返回值是0或-1)」?我認爲你對退貨類型感到困惑。在'int create_int();'返回的int是大範圍內的任何正整數或負整數或零整數。 – 2012-01-05 15:58:31

+0

@Kyrol:'Foo create_foo();'不是一個函數。它是一個函數定義。函數中定義了您的返回值。也許我不理解你的問題... – Andrew 2012-01-05 15:59:37

回答

1

而不是傳遞(大)結構來回在棧中,傳遞一個指針和使用堆棧作爲狀態指示器。

struct foo { /* ... whatever ... */ }; 
int fxfoo(struct foo *pfoo) { /* ... whatever ... */ return ALLOK?0:1; } 
int main(void) { 
    struct foo objfoo; 
    if (fxfoo(&objfoo)) /* error */; 
} 
+0

謝謝!現在我明白了......但我不明白我的問題。好的是一個愚蠢的問題,但我只是想明白! 謝謝你的回答! – Kyrol 2012-01-05 16:23:41

+0

我沒有downvote你的問題。我也有意見downvoting應該解釋:) – pmg 2012-01-05 16:25:38

+0

正是......好吧,我明白了錯誤。我不必使用struct類型來做一個函數,而必須使用int類型來執行一個函數,並將結構的指針作爲參數傳遞。對? ;) – Kyrol 2012-01-05 16:31:19

0

返回值是結構Foo的完整實例。如果你想檢查它的值,你將不得不將它分配給某個東西,然後逐個檢查。

0
struct A{ 
int x; 
char c; 
} 

Foo create_foo(){ 
struct A a; 
a.x = 5; 
a.c = 'd'; 

return a; // <-- This will be your return value. 
} 
+0

這是好的,但現在我編輯更好的問題。我想我在一開始就解釋得最糟糕。 – Kyrol 2012-01-05 16:14:44

0

您使用的返回值你可以使用任何返回值以同樣的方式...

Foo x = create_foo(); 
if(x.field == y) {...};