for(i=0;i<2;i++)
k=f(a++);printf("%d\n",k); }
为什么k为4呢?求解过程
首先f函数中的c是一个静态变量,生命周期是全局的,
这里c的3是以初值形式赋予的,所以只有第一次执行f()的时候赋为3,
所以执行循环的时候:
i=0时,a=2,先取值后++,f(2),a=3;f函数内a=c++,先取值后++,a=3(这个a的作用于在函数f内,不影响外部的a),c=4,最后的a被return给k;k=3;
i=1时,a=3,先取值后++,f(3),a=4;f函数内a=c++,先取值后++,a=4,c=5,a被return给k,k=4。
i=2时,循环结束。
最后输出k为4。
这里c的3是以初值形式赋予的,所以只有第一次执行f()的时候赋为3,
所以执行循环的时候:
i=0时,a=2,先取值后++,f(2),a=3;f函数内a=c++,先取值后++,a=3(这个a的作用于在函数f内,不影响外部的a),c=4,最后的a被return给k;k=3;
i=1时,a=3,先取值后++,f(3),a=4;f函数内a=c++,先取值后++,a=4,c=5,a被return给k,k=4。
i=2时,循环结束。
最后输出k为4。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-03-10
你写的乱七八糟。
不过我猜到了你的程序,你不明白的应该是为什么c在第二次调用的时候,值是4不是3了是吧。
这个c定义的是静态局部变量,它被存放在全局数据区。所以函数结束以后c的内存不会被收回,还会保存上一次调用完成以后的值,而静态局部变量只在第一次调用的时候初始化,第二次调用的时候它保持上一次调用完成后的值。你的程序里面f函数调用两次,第一次调用后c变成4,所以第二次调用时候,f的返回值就是4+0 = 4.所以输出的就是4.你可以去百度搜索一下static,看一看这个静态变量的具体说法
不过我猜到了你的程序,你不明白的应该是为什么c在第二次调用的时候,值是4不是3了是吧。
这个c定义的是静态局部变量,它被存放在全局数据区。所以函数结束以后c的内存不会被收回,还会保存上一次调用完成以后的值,而静态局部变量只在第一次调用的时候初始化,第二次调用的时候它保持上一次调用完成后的值。你的程序里面f函数调用两次,第一次调用后c变成4,所以第二次调用时候,f的返回值就是4+0 = 4.所以输出的就是4.你可以去百度搜索一下static,看一看这个静态变量的具体说法
第2个回答 2013-03-10
很简单啊,前面c是静态成员变量,并不会随着函数的消失而消失。并且c = 3;在f()函数里,返回a的值,而a的值第一次循环的时候为3,然后c做自加的操作此时变成了4,所以返回回来的是4。这个函数的关键点在static和右++。
第3个回答 2020-03-14
#include
int
f(int
a)
{
int
b=0;
static
int
c=3;//静态变量,只做一次初值赋值,即:第一次调用fun
c=3
a=c++,b++;
//第一次调用本函数后,c=4,第二次后,c=5,第三次后c=6......
return
a;
//第一次调用本函数后,a=3,二次后,a=4,第三次后a=5.....
}
int
f(int
a)
{
int
b=0;
static
int
c=3;//静态变量,只做一次初值赋值,即:第一次调用fun
c=3
a=c++,b++;
//第一次调用本函数后,c=4,第二次后,c=5,第三次后c=6......
return
a;
//第一次调用本函数后,a=3,二次后,a=4,第三次后a=5.....
}