gpt4 book ai didi

c - 当函数返回时,临时存储在 C 中如何工作?

转载 作者:行者123 更新时间:2023-12-04 12:54:10 26 4
gpt4 key购买 nike

我非常了解 C,但是我对临时存储的工作原理感到困惑。

就像函数返回时一样,该函数内部发生的所有分配都被释放(从堆栈或实现决定这样做)。

例如:

void f() {
int a = 5;
} // a's value doesn't exist anymore

但是我们可以使用return关键字来向外界传输一些数据:

int f() {
int a = 5;
return a;
} // a's value exists because it's transfered to the outside world

如果有任何错误,请阻止我。

奇怪的是,当您使用数组 执行此操作时,它不起作用。

int []f() {
int a[1] = {5};
return a;
} // a's value doesn't exist. WHY?

我知道数组只能通过指针访问,如果不使用指针,就不能像其他数据结构一样传递数组。这就是你不能返回数组并在外界使用它们的原因吗?因为它们只能通过指针访问?

我知道我可以使用动态分配将数据保存到外部世界,但我的问题是关于临时分配。

谢谢!

最佳答案

当你返回一些东西时,它的值被复制。 a 确实存在于第二个示例中的函数之外;它的值(value)确实如此。 (它作为右值存在。)

在您的最后一个示例中,您将数组 a 隐式转换为 int*,然后返回该副本。 a 的生命周期结束,而你指的是垃圾。

没有变量存在于它的范围之外,永远。

关于c - 当函数返回时,临时存储在 C 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3339083/

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