2018-11-18 回答
就是说结构体是传值给子函数的,当子函数退出时,外面函数的值不会修改。
举个例子来说:
struct s
{
int a;
int b;
};
void change(struct s s)
{
s.a = 10;
s.b = 20;
printf("in change:s.a=%d,s.b=%d\n",s.a,s.b);
}
void main(void)
{
struct s s;
s.a = 1;
s.b = 2;
printf("before change:s.a=%d ,s.b=%d\n",s.a,s.b);
change(s);
printf("after change:s.a=%d ,s.b=%d\n",s.a,s.b);
}
这个函数的输出为:
before change:s.a=1 , s.b=2
in change:s.a=10, s.b=20
after change:s.a=1 , s.b=2
注意,在调用函数前和调用函数后,结构体的值都不变。
在子函数中的值变了,但子函数修改的是结构体s的另外一个备份,而不是结构体指针。
(如果希望能修改结构体的值,需要传入结构体的指针进去)
比如,改为:
struct s
{
int a;
int b;
};
void change(struct s* s)
{
s->a = 10;
s->b = 20;
printf("in change:s.a=%d,s.b=%d\n",s->a,s->b);
}
void main(void)
{
struct s s;
s.a = 1;
s.b = 2;
printf("before change:s.a=%d ,s.b=%d\n",s.a,s.b);
change(&s);
printf("after change:s.a=%d ,s.b=%d\n",s.a,s.b);
}
则输出为:
before change:s.a=1 ,s.b=2
in change:s.a=10,s.b=20
after change:s.a=10 ,s.b=20