函数作用域结束后内存中局部变量的持久性?
例如,如果我有一个小功能:
int sum(int a, int b)
{
int result = a+b;
return result;
}
这里的result
是一个局部变量,根据我的理解,这个局部变量只适用于函数的执行时间。 这个函数的调用者如何能够检索sum()函数的返回值,这只是局部变量result
的值? 只是想知道函数中声明的局部变量的值是如何返回给调用者函数的。 我知道这发生在堆栈中,但我想知道它是如何发生的。
return result;
不返回result
的变量,它返回的值 result
变量。 所以当函数返回时result
很好,我们需要的只是它的值。
返回值通常放在寄存器中而不是堆栈中,但可能会在某些体系结构中被压入堆栈。 这个关于cdecl调用风格的页面给出了一个很好的概述。 请注意,细节因调用约定和平台而异。
但关键点仍然是第一段:调用者收到的result
的价值result
不是result
。
您传递变量值,而不是变量。 通过这种方式,您可以直接传递值,例如sum(8)
。
一切都是特定于实现的,但您可以假设调用result = sum(myValueOne, myValueTwo);
函数看起来这样(当然这是一个谎言:)):
myValueOne
值以注册 myValueTwo
值复制到其他寄存器 result
变量 你可以在下面的例子中看到它更好:
void increment(int a)
{
a++;
}
int main(void)
{
int a =7;
increment(a);
printf("My number is now: %dn", a); /* Will print 7 */
return 0;
}
你对变量的范围是正确的。 这里你是错误功能的例子:
int* increment(int a)
{
int b;
b = a+1;
return &b;
}
它返回指向局部变量的(地址)的指针,当然这是错误的,因为函数退出后该变量不存在。 无论如何,在这种情况下,编译器应至少返回警告。
干杯,米科拉杰
有一个问题在内存中我的变量存储在c中? 它说明事物如何存储在计算机中,因此局部变量存储在堆栈中,全局变量存储在数据中
链接地址: http://www.djcxy.com/p/82493.html上一篇: Persistence of local variables in memory after end of function scope?