在C函数中将结构作为参数传递

  • 本文关键字:参数传递 结构 函数 c
  • 更新时间 :
  • 英文 :

typedef struct { int b, p; } A;
void f(A c);
int main()
{
int i;
A a = {1,2};
f(a);
printf("%d,%dn",a.b,a.p);
return 0;
}
void f(A c)
{
int j;
c.b += 1;
c.p += 2;
}

在下面的代码中,为什么a.b和a.p在经过f(a(后仍然是1和2,这应该将它们更改为2和3?

您使用的是按值调用,在按值调用中,您对函数参数所做的更改不会反映在调用者中,因此您需要通过引用调用

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,%dn",a.b,a.p);
//call by referecne    
f2(&a);
printf("%d,%dn",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;
}

最新更新