- /*
- *分析下面一段代码
- *填写程序运行结果
- *并说明理由
- */
- #include <stdio.h>
- int fun1();
- int fun2();
- int main(int argc , char **argv)
- {
- fun1();
- printf("%d\n" , fun2());
- return 0;
- }
- int fun1()
- {
- int n ;
- n = 12345;
- return n;
- }
- int fun2()
- {
- int m ;
- return m;
- }
你能猜到程序的结果么? 呵呵...
主函数main()先后调用了函数fun1()和fun2(),他们都是无参并返回整数的函数。在fun1()中,定义了
局部变量n,并给其初始化为12345。在fun2中定义了局部变量m,没有初始化。可是在将该变量值返回后
,在主函数中输出该值,却是12345,恰好就是fun1()函数中初始化的值。这说明,fun2()中,
没有显示初始化的局部变量m,也没有给其默认的初始化,其值保留为原内存位置的值。为什么原内存
位置恰好就是存放12345的位置呢?这就是“函数调用机制” ,函数的栈操作原理。
C语言函数在调用时首先:
1.建立被调函数的栈空间
2.保护调用函数的运行状态和返回地址
3.传递参数
4.将控制转交被调函数
转载于:https://blog.51cto.com/mjrao/1007943