1. /* 
  2. *分析下面一段代码 
  3. *填写程序运行结果 
  4. *并说明理由 
  5. */ 
  6. #include <stdio.h> 
  7.  
  8. int fun1(); 
  9. int fun2(); 
  10.  
  11. int main(int argc , char **argv) 
  12.     fun1(); 
  13.     printf("%d\n" , fun2()); 
  14.     return 0;    
  15. int fun1() 
  16.     int n ; 
  17.     n = 12345; 
  18.     return n; 
  19. int fun2() 
  20.     int m ; 
  21.     return m; 


你能猜到程序的结果么? 呵呵...

  主函数main()先后调用了函数fun1()和fun2(),他们都是无参并返回整数的函数。在fun1()中,定义了
局部变量n,并给其初始化为12345。在fun2中定义了局部变量m,没有初始化。可是在将该变量值返回后
,在主函数中输出该值,却是12345,恰好就是fun1()函数中初始化的值。这说明,fun2()中,
没有显示初始化的局部变量m,也没有给其默认的初始化,其值保留为原内存位置的值。为什么原内存
位置恰好就是存放12345的位置呢?这就是“函数调用机制” ,函数的栈操作原理。

C语言函数在调用时首先:

1.建立被调函数的栈空间

2.保护调用函数的运行状态和返回地址

3.传递参数

4.将控制转交被调函数