在C函数中作为参数传递结构
在下面的代码中,为什么a.b和a.p即使经过f(a)后仍然是1和2,而f(a)应该将它们更改为2和3?您使用的是按值调用,在按值调用中,您对函数参数所做的更改不会反映在调用方中,因为您需要按引用调用在C函数中作为参数传递结构,c,C,在下面的代码中,为什么a.b和a.p即使经过f(a)后仍然是1和2,而f(a)应该将它们更改为2和3?您使用的是按值调用,在按值调用中,您对函数参数所做的更改不会反映在调用方中,因为您需要按引用调用 typedef struct { int b, p; } A; void f(A c); int main() { int i; A a = {1,2}; f(a); printf("%d,%d\n",a.b,a.p); return 0; } void f(
typedef struct { int b, p; } A;
void f(A c);
int main()
{
int i;
A a = {1,2};
f(a);
printf("%d,%d\n",a.b,a.p);
return 0;
}
void f(A c)
{
int j;
c.b += 1;
c.p += 2;
}
您将整个结构作为参数传递。然后,这些更改是函数的局部更改。您应该传递一个指针,
void f(a*c)
typedef struct { int b, p; } A;
void f(A c);
void f2(A *c);
int main()
{
int i;
A a = {1,2};
// call by value
f(a);
printf("%d,%d\n",a.b,a.p);
//call by referecne
f2(&a);
printf("%d,%d\n",a.b,a.p);
return 0;
}
void f(A c)
{
int j;
c.b += 1;
c.p += 2;
}
void f2(A *c)
{
int j;
c->b += 1;
c->p += 2;
}