#include<stdio.h> f(int a) { int b=0; static int c=3; a=c++,b++; return(a); } main() {int a=2,i,k;
for(i=0;i<2;i++)k=f(a++);printf("%d\n",k);}为什么k为4呢?求解过程...
for(i=0;i<2;i++)
k=f(a++);printf("%d\n",k); }
为什么k为4呢?求解过程 展开
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。
展开全部
你写的乱七八糟。
不过我猜到了你的程序,你不明白的应该是为什么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,看一看这个静态变量的具体说法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很简单啊,前面c是静态成员变量,并不会随着函数的消失而消失。并且c = 3;在f()函数里,返回a的值,而a的值第一次循环的时候为3,然后c做自加的操作此时变成了4,所以返回回来的是4。这个函数的关键点在static和右++。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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.....
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询