从结构中返回值

时间:2009-11-05 04:16:02

标签: c

typedef struct Value{
    int id;
    char type;
    char a;
} Value;

void fooV(Value v){
    v.id = 10;
    v.type = 'L';
    v.a = 'R';
}

int main(void){
    Value v;
    Pointer p;
    int id = 5;
    char type = 't';
    char a = 'a';

    printf("id: %d, type: %c, a: %c \n",id,type,a);

    v.a = a;
    v.id = id;
    v.type = type;
    fooV(v);
    printf("id: %d, type: %c, a: %c \n",id,type,a);

}

在fooV调用中,创建局部变量值... 因此,呼叫者中的数据不会更新 但是如果我想从fooV返回值呢?我该怎么加入fooV?谢谢

3 个答案:

答案 0 :(得分:10)

你需要在中通过引用传递v,这是使用C中的指针完成的:

void fooV(Value* v)
{
    (*v).id = 10;
    (*v).type = 'L';
    (*v).a = 'R';
}

或使用 - >速记算子:

void fooV(Value* v)
{
    v->id = 10;
    v->type = 'L';
    v->a = 'R';
}

不要忘记传递v的地址:

fooV(&v);

答案 1 :(得分:5)

如果您只想要一个返回“构造”fooV结构的Value函数,则可以按如下方式重写fooV

Value fooV() {
    Value v;
    v.id = 10;
    v.type = 'L';
    v.a = 'R';
    return v;
}

你会把这个函数称为:

Value v = fooV();

否则,如果您需要一个修改已有Value结构的函数,您有两个选择:您需要更改fooV的返回类型:

Value fooV(Value v){
    v.id = 10;
    v.type = 'L';
    v.a = 'R';
    return v;
}

在这种情况下,您可以将其称为:

v = fooV(v);

或更改fooV以接受指向Value的指针:

void fooV(Value* v){
    v->id = 10;
    v->type = 'L';
    v->a = 'R';
}

在这种情况下,您可以将其称为:

fooV(&v);

答案 2 :(得分:1)

并更改第二个printf以使用v的值,而不是变量id,type,a。

printf("id: %d, type: %c, a: %c \n",v.id,v.type,v.a);