Luc*_*eis 2 c memory-management
我很了解C,但我对临时存储的工作原理感到困惑.
就像函数返回时一样,所有在该函数内发生的分配都被释放(从堆栈中或者实现决定这样做).
例如:
void f() {
int a = 5;
} // a's value doesn't exist anymore
Run Code Online (Sandbox Code Playgroud)
但是我们可以使用return关键字将一些数据传输到外部世界:
int f() {
int a = 5;
return a;
} // a's value exists because it's transfered to the outside world
Run Code Online (Sandbox Code Playgroud)
如果有任何错误,请阻止我.
现在这是奇怪的事情,当你这样做时arrays,它不起作用.
int []f() {
int a[1] = {5};
return a;
} // a's value doesn't exist. WHY?
Run Code Online (Sandbox Code Playgroud)
我知道数组只能通过指针访问,如果不使用指针,就不能像其他数据结构那样传递数组.这是你无法返回数组并在外界使用它们的原因吗?因为它们只能通过指针访问?
我知道我可以使用动态分配将数据保存到外部世界,但我的问题是关于临时分配.
谢谢!
GMa*_*ckG 10
返回某些内容时,会复制其值.a并没有在你的第二个例子中,函数之外存在; 它的价值确实如此.(它作为右值存在.)
在上一个示例中,您隐式将数组转换a为a int*,并返回该副本.a生命结束了,你指的是垃圾.
从来没有任何变量超出其范围.