这是一个简单的程序:
simple.c
int inverse(int input)
{
if( input == 0 )
return 1;
else
return 0;
}
int main()
{
inverse(1);
return 0;
}
我的问题是:
inverse()
是否会推送名为
int input
或者只是每次访问时都会引用参数?
答案 0 :(得分:3)
请记住。 int input
定义是函数inverse()
的本地定义。因此,每次调用inverse()
时,input
的堆栈空间都是单独分配的,一旦inverse()
完成执行,就不会存在input
变量。
*没有任何编译器优化
答案 1 :(得分:1)
函数inverse的调用者提供所有参数的值。函数inverse然后将这些值转换为局部变量,就像您声明了
一样int input;
在函数内部。
答案 2 :(得分:1)
在函数或块内声明的变量称为局部变量。它们只能由该函数或代码块中的语句使用。本地变量不为自己的函数所知。
在这种情况下,int input
是一个局部变量。
执行完成后,将不会引用变量int input
。 @ Sourav关于编译器优化的提示+1。