该函数内的变量会发生什么变化?
void function()
{
int a = 5;
a += a; //a contain 10
}
int main()
{
function();
return 0;
}
所以在函数(function())执行完成后发生的事情是这个变量(a)是否仍然在内存中找到(使用内存),其最后一个值为(10)或者它完全被破坏而不再被破坏在记忆中?
答案 0 :(得分:2)
它通常存储在堆栈中,即它是自动分配的,并且每个函数调用都会回收这些自动分配的内存。您的编译器可能会认为此变量实际上是无用的并且完全忽略它,因为它从未使用过并且不会影响代码的任何其他部分,因此可能发生的事情是:Nothing。
在C和C ++中,重要的是要记住局部变量之间存在巨大差异,这些变量被认为是自动分配的,只有在函数执行时才能存活,并通过指针和new
动态分配。它会一直存在,直到它们被delete
移除或程序终止。
答案 1 :(得分:2)
它没有真正指定。我先描述一下天真的案例,然后解释为什么它可能不适用。
虽然名称a
在a
之外无法访问,但内存function
仍然存在。内存可能包含或不包含10
- 编译器可以自由覆盖它或不打扰。显然,它之后的任何时候都可能被重复使用。
如果a
确实已在内存中分配,那可能位于称为(call)stack 的区域中,但这只是一个受欢迎的调用惯例,而不是语言要求。
现在,编译器也可以自由地将a
存储在一个寄存器中,因为它注意到地址从未被采用,在这种情况下,传统意义上它永远不会 内存中。
编译器可以进一步注意到a
根本不会被观察到使用,而且不会在function
内发出任何代码。
答案 2 :(得分:0)
当函数结束所有局部变量时,基本上消失(更确切地说,当它们的块结束时它们会消失)。
谈论他们“留在记忆中”的“最后价值”是一个相当无意义的练习,因为他们的价值可能从一开始就没有记忆。即使它有,也不能保证它仍然存在,或者在任何意义上仍然可以访问该存储器。