请教C语言中局部变量的问题

有这个程序:
#include <stdio.h>

int f(int a)
{
int b;
b=a+1;
return b;
}

void main()
{
int c=2;
printf("%d",f(c));
}

结果会输出3,但f()函数中b是局部变量啊,在函数执行完不是会自动消失么?怎么还能打印出来呢?

32位系统所有函数返回值都只有一个,也就是EAX寄存器的值。

函数调用的时候,参数压栈,返回的时候,被调函数将计算好的返回值写入 EAX寄存器,然后 ret(EIP取压栈的主调处的下一行指令地址),主调处直接从EAX取得函数返回值。

所以, printf("%d",f(c));就是直接打印了返回的 EAX的值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-20
返回到了主函数啊,怎么可能不打印啊,自动消失的是形参,
主函数通过得到函数返回的值得到经过函数处理的结果
第2个回答  2009-10-20
return语句实际上是生成了一个b的拷贝,函数外使用的就是这个拷贝,而不是b本身,所以b消失了也没关系.
第3个回答  2009-10-20
printf("%d",f(c));
打印的不是函数f中的b,打印的是函数f的函数值

int f(int a)
{
int b;
b=a+1;
return b;
}
在这个函数中 执行到 return b;语句 他回使函数值等于b,函数值返回给调用函数的语句,函数返回后 b消失了 但是b的值 已经由函数值 返回了

printf("%d",f(c));

可以拆解成两句

int i=f(c);
printf("%d",i);

这样就更容易理解了 , i=f(c)调用 f(c) 把返回值 带回来 并赋值给i
然后在输出i
相似回答