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);
}
Run Code Online (Sandbox Code Playgroud)
在fooV调用中,创建局部变量值...因此调用者中的数据不会更新但是如果我想从fooV返回值呢?我该怎么加入fooV?谢谢
aib*_*aib 10
你需要通过引用传递v in ,这是使用C中的指针完成的:
void fooV(Value* v)
{
(*v).id = 10;
(*v).type = 'L';
(*v).a = 'R';
}
Run Code Online (Sandbox Code Playgroud)
或者使用 - >简写操作符:
void fooV(Value* v)
{
v->id = 10;
v->type = 'L';
v->a = 'R';
}
Run Code Online (Sandbox Code Playgroud)
不要忘记通过v的地址:
fooV(&v);
Run Code Online (Sandbox Code Playgroud)
如果您只想拥有一个fooV返回"构造" Value结构的函数,可以fooV按如下方式重写:
Value fooV() {
Value v;
v.id = 10;
v.type = 'L';
v.a = 'R';
return v;
}
Run Code Online (Sandbox Code Playgroud)
你会称这个函数为:
Value v = fooV();
Run Code Online (Sandbox Code Playgroud)
否则,如果您需要一个修改Value已有结构的函数,则有两个选项:您需要更改返回类型fooV:
Value fooV(Value v){
v.id = 10;
v.type = 'L';
v.a = 'R';
return v;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你会称之为:
v = fooV(v);
Run Code Online (Sandbox Code Playgroud)
或更改fooV以接受指向以下内容的指针Value:
void fooV(Value* v){
v->id = 10;
v->type = 'L';
v->a = 'R';
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你会称之为:
fooV(&v);
Run Code Online (Sandbox Code Playgroud)