2012-01-05 57 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) {...};