簡體   English   中英

從結構中返回值

[英]return values from a struct

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? 謝謝

你需要通過引用傳遞v in,這是使用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);

如果您只想擁有一個返回“構造” Value結構的fooV函數,您可以按如下方式重寫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);

並更改第二個printf以使用v的值,而不是變量id,type,a。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM