求C语言高手教一下,这个程序在系统中怎么执行的?(我不要答案,要过程)

[复制链接]
查看11 | 回复5 | 2011-8-12 21:03:26 | 显示全部楼层 |阅读模式
#include
int fun3(int x)
{static int a=3;
a=a+x;
return a;
}
main()
{int k=2,m=1,n;
n=fun3(k);
n=fun3(m);
printf(“%d\n”,n);
}

回复

使用道具 举报

千问 | 2011-8-12 21:03:26 | 显示全部楼层
从简单方面考虑:函数内部的静态变量,只初始化一次,也即该函数第一次运行时进行初始化,以后均不会执行初始化。拿上面的例子来说,static int a = 3只有在fun3函数第一次执行的时候将a初始化为3,而以后的调用均不会执行这句话,所以不难看出,第一次调用func3后a变为5,那么第二次调用时就是5了,所以n将会为6.如果你了解了编译原理,以及程序的链接与加载,就会更加透彻了,实际是static int a = 3;在编译期间时就已经初始化完毕,也就是a其实是放在可执行文件的.data节中,从而在实际运行时int a = 3是不会执行的,有点扯远了。不深入的话从第一点考虑就ok!...
回复

使用道具 举报

千问 | 2011-8-12 21:03:26 | 显示全部楼层
main(){int k=2,m=1,n;n=fun3(k);//调用fun3 //int fun3(int x)
==> x=2//{static int a=3;==> a=3//a=a+x; ==> a=5//return a; ==> return 5//}//调用完成 n=5 n=fun3(m); ...
回复

使用道具 举报

千问 | 2011-8-12 21:03:26 | 显示全部楼层
k=2, m=2;这些你应该知道的吧n=fun3(k);则是调用函数fun3 而在fun3函数里面 有个静态变量 静态变量是不管你调用几次 永远只初始化一次 则静态变量a=静态变量a+变量x的值相当于a = 3+2;任何返回a的值,也就是5下面这个调用函数n=fun3(m); 是把1的值当参数传递到fun3函数 我上面也提到过了 静态变量是只初始化一...
回复

使用道具 举报

千问 | 2011-8-12 21:03:26 | 显示全部楼层
首先开辟变量 k, m, n;k的初始值为3,m的初始值为1,n没有初始值;n=fun3(k):因为k=3所以fun3中return时a=a+x;此时a=3,为初始值;k作为参数传递给x;所以fun3返回5,n也被赋值成5;n=fun3(m);同理fun3的返回值是3+m,为4,所以n被赋值成4;最后一句,输出n...
回复

使用道具 举报

千问 | 2011-8-12 21:03:26 | 显示全部楼层
n=fun3(k);这个语句后,n值为5n=fun3(m);这个语句后,n值为4所以最后输出值为4每次调用fun3时a的值都被重置...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行