我理解通过引用和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)。所以第一种方法是正确的方法。第二个代码片段错误,无法编译
答案 0 :(得分:2)
在C中,既没有引用,也没有按引用传递概念。参数始终按值传递。
您可以使用指针模拟通过引用传递语义。当然,你可以传递那个指针。指针本身按值传递(参见我的第一段),因此每个函数都有自己的副本。但是这个值(它指向的地址)并没有改变,所以每个函数都可以访问指针所指向的数据。
您的第二个代码段没有任何意义。改变变量的地址是不可能的。而且,正如你应该从我的答案的其余部分中理解的那样,无论你怎么努力都没有必要。