gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:53:48 24 4
gpt4 key购买 nike

我理解 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;
}

main函数打印出4还是7?此外,如果我想确保将引用传递给 f1 内的 f2 ,我的想法是:

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

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

但我觉得它不是那么优雅和快速(在我的程序中,我使用一些相当大的结构而不是int,并且我想避免创建副本在每个函数中)。我的灵魂到底还能用吗?有没有更优雅、更快的方法?

提前致谢

编辑:

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

最佳答案

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

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

<小时/>

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

关于C、通过引用传递给函数。向前传球,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45303574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com