Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C函数中作为参数传递结构_C - Fatal编程技术网

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

在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(

在下面的代码中,为什么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(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;
}