[英]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.