这道题其实出的不好。
函数printf里面my(4)和my(5)执行顺序是不确定的,和编译器有关。按照上面的意思应该是my(5)先执行,count初始化为a,即5,return的是count+a,等于10。执行my(4)的时候,count依然是5,return的是9。
你的这种写法应该说是错误的。原因是static int count=a这一句是“声明一个静态变量count并初始化为a“,它只在第一次调用my函数时执行,以后就不执行了;且,printf函数总是从列表变量的右端开始计算压栈,却是从左至右对应弹出的,所以就造成了你这种结果。要想达到目的改写一下my函数就是了:
int my(const int a){
static int count;
count=a;//这一句每次调用时都会执行的.
return count+a;
}
#include
int my(const int a)
{
static int count;
count = a;
return count+a;
}
int main()
{
printf("%d\n%d\n",my(4),my(5));
return 0;
}
---------------------------
VC++6.0
结果是
8
10
--------------------------
原程序
#include
int my(const int a)
{
static int count=a;
return count+a;
}
int main()
{
printf("%d\n%d\n",my(4),my(5));
return 0;
}
------------
VC++6.0
结果是
9
10
--------------------------
差异在于
全局变量和STATIC变量的初始化是在 main函数之前进行的,不是在编译时进行。
---------
原程序中是static变量初始化,只有这一次,初始化为5,第二次进入my函数跳过static变量初始化。。。
--------
改过的是赋值,没有初始化,注意区别。。
----------
printf("%d\n%d\n",my(4),my(5)); 里面后面的a=5会覆盖前面的a=4 然后才打印出来