c语言关于全局变量的问题!
inta=2;intf(intn){staticinta=3;intt=0;if(n%2){staticinta=4;t+=a++;}else{staticinta=5;...
int a=2;
int f(int n)
{
static int a=3;
int t=0;
if(n%2)
{
static int a=4;
t+=a++;
}
else
{static int a=5;
t+=a++;}
return t+a++;
}
main()
{
int s=a,i;
for(i=0;i<3;i++)
s+=f(i);
printf("%d\n",s);
}
帮忙详细解释下这个程序的过程。谢谢~~ 展开
int f(int n)
{
static int a=3;
int t=0;
if(n%2)
{
static int a=4;
t+=a++;
}
else
{static int a=5;
t+=a++;}
return t+a++;
}
main()
{
int s=a,i;
for(i=0;i<3;i++)
s+=f(i);
printf("%d\n",s);
}
帮忙详细解释下这个程序的过程。谢谢~~ 展开
2个回答
展开全部
结果
for(i=0;i<3;i++) s+=f(i);
s 初值s0 等于 全局性量 int a=2;
以后累加3次循环返回值 f(0),f(1),f(2).
f 函数里有 同名的3个 static int a;
他们的作用域:
int f(int n)
{
int t=0; // 每次进入t=0
static int a=3; //a1域
if(n%2)
{ static int a; // a2域
} else {
static int a; // a3域
}
//a1域
return t+a++;
-------------------------
static 量,当退出函数时,该存储单元保留,所以老值保留,不变0。
f(0) 调用,a1=3,通过a3域,t=5,a3 后加加变6,送返 t+a1=8, 送返同时a1++ 变 4;
f(1) 调用,a1=4,通过a2域,t=4,a2 后加加变5,送返 t+a1=8, 送返同时a1++ 变 5;
f(2) 调用,a1=5,通过a3域,t=6,a3 后加加变7,送返 t+a1=6+5=11, 送返同时a1++ 变 6;
-------------------------------------
s=s0+f(0)+f(1)+f(2) = 2+8+8+11 = 29
答案 29
for(i=0;i<3;i++) s+=f(i);
s 初值s0 等于 全局性量 int a=2;
以后累加3次循环返回值 f(0),f(1),f(2).
f 函数里有 同名的3个 static int a;
他们的作用域:
int f(int n)
{
int t=0; // 每次进入t=0
static int a=3; //a1域
if(n%2)
{ static int a; // a2域
} else {
static int a; // a3域
}
//a1域
return t+a++;
-------------------------
static 量,当退出函数时,该存储单元保留,所以老值保留,不变0。
f(0) 调用,a1=3,通过a3域,t=5,a3 后加加变6,送返 t+a1=8, 送返同时a1++ 变 4;
f(1) 调用,a1=4,通过a2域,t=4,a2 后加加变5,送返 t+a1=8, 送返同时a1++ 变 5;
f(2) 调用,a1=5,通过a3域,t=6,a3 后加加变7,送返 t+a1=6+5=11, 送返同时a1++ 变 6;
-------------------------------------
s=s0+f(0)+f(1)+f(2) = 2+8+8+11 = 29
答案 29
展开全部
函数中的静态变量只会被赋一次值,它的生存期一直到程序结束,但是每个静态变量又都有它的作用域,它只在声明变量的{}之内起作用。
在函数中全局变量a不会起作用,起作用的只有局部的a。
f(0):
因为n=0,a=3,进入else中得到t=5,同时使else语句中的a变成了6,返回t+a++=8,同时使得函数中的a=4;
f(1):
因为n=1,a=4,进入if中得到t=4,同时使if语句中的a变成了5,返回t+a++=8,同时使得函数中的a=5;
f(2):
因为n=2,a=5,进入else中得到t=6,同时使else语句中的a变成了7,返回t+a++=11,同时使得函数中的a=6;
所以结果=f(0)+f(1)+f(2)+s=8+8+11+2=29;
但是不建议这样写程序。
在函数中全局变量a不会起作用,起作用的只有局部的a。
f(0):
因为n=0,a=3,进入else中得到t=5,同时使else语句中的a变成了6,返回t+a++=8,同时使得函数中的a=4;
f(1):
因为n=1,a=4,进入if中得到t=4,同时使if语句中的a变成了5,返回t+a++=8,同时使得函数中的a=5;
f(2):
因为n=2,a=5,进入else中得到t=6,同时使else语句中的a变成了7,返回t+a++=11,同时使得函数中的a=6;
所以结果=f(0)+f(1)+f(2)+s=8+8+11+2=29;
但是不建议这样写程序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询