C,通过引用传递给函数。向前传递

时间:2017-07-25 12:39:22

标签: c pointers

我理解通过引用和C中的值传递的含义,但在我的程序中,我希望"传递"为了整洁的目的,引用另一个函数,例如:

void f2(int *x2)
{
   *x2 = 7;
}

void f1(int *x1)
{
   *x1 = 4;
    f2(x1);
}

int main()
{
  int x = 1;
  f1(&x);
  printf("%d\n",x);
  return 1;
}

主要功能是打印4还是7? 此外,如果我想确保将f2内的引用传递给f1,我的想法是:

void f1(int *x1)
{
   *x1 = 4;

    int x2;
    &x2 = x1;
    f2(&x2);
}

但是我发现它优雅而快速(在我的程序中我使用而不是int一些非常大的structs而且我想避免在每个函数中创建副本) 。我的灵魂无论如何都有效吗?是否有更优雅,更快捷的方式?

提前致谢

编辑:

我测试了它,第一个片段确实编译并按预期工作(主要打印出7)。所以第一种方法是正确的方法。第二个代码片段错误,无法编译

1 个答案:

答案 0 :(得分:2)

在C中,既没有引用,也没有按引用传递概念。参数始终按值传递。

您可以使用指针模拟通过引用传递语义。当然,你可以传递那个指针。指针本身按值传递(参见我的第一段),因此每个函数都有自己的副本。但是这个值(它指向的地址)并没有改变,所以每个函数都可以访问指针所指向的数据。

您的第二个代码段没有任何意义。改变变量的地址是不可能的。而且,正如你应该从我的答案的其余部分中理解的那样,无论你怎么努力都没有必要。

相关问题