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?谢谢
答案 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);