问一个c语言静态变量的问题? 5
f(inta){autob=0;staticc=3;b=b+1;c=c+1;return(a+b+c);}main(){inta=2,i;for(i=0;i<3;i++)...
f(int a)
{auto b=0;
static c=3;
b=b+1;
c=c+1;
return(a+b+c);
}
main()
{int a=2,i;
for(i=0;i<3;i++)
printf("%d",f(a));
}
请问这个static c 后c有什么变化吗?一直保持是3?不自动加1 ?
回复楼下:那就是说b永远是1了? 展开
{auto b=0;
static c=3;
b=b+1;
c=c+1;
return(a+b+c);
}
main()
{int a=2,i;
for(i=0;i<3;i++)
printf("%d",f(a));
}
请问这个static c 后c有什么变化吗?一直保持是3?不自动加1 ?
回复楼下:那就是说b永远是1了? 展开
4个回答
展开全部
请问这个static c 后c有什么变化吗?
答:根据你的程序,c=c+1,所以c是有变换的。
一直保持是3?
答:不是,从3开始的自加。
不自动加1 ?
答:自加1.
static c表示c的值将被保存在静态区。通俗的说就是不论调用f(int a) 多少次,c只初始化一次,并且,其值是有保存的。
例如,你第一次进入,c初始化为3,加1后为4
第二次进入,c为4,加1为5
第三次,c为5,加1为6
...
依次保存住了c的值。
我们要明白,一个子函数的变量在子函数销毁的时候就应该消亡,但是static的变量是静态的所以一直存在。
相对于c,b就惨多了,每一次进入f,b都为0.其实,b是重新被创建了一次,因为结束f函数后,b就消亡了。
补充:b确实永远是1,正解
答:根据你的程序,c=c+1,所以c是有变换的。
一直保持是3?
答:不是,从3开始的自加。
不自动加1 ?
答:自加1.
static c表示c的值将被保存在静态区。通俗的说就是不论调用f(int a) 多少次,c只初始化一次,并且,其值是有保存的。
例如,你第一次进入,c初始化为3,加1后为4
第二次进入,c为4,加1为5
第三次,c为5,加1为6
...
依次保存住了c的值。
我们要明白,一个子函数的变量在子函数销毁的时候就应该消亡,但是static的变量是静态的所以一直存在。
相对于c,b就惨多了,每一次进入f,b都为0.其实,b是重新被创建了一次,因为结束f函数后,b就消亡了。
补充:b确实永远是1,正解
展开全部
不是有c=c+1么,每运行一次f,c的值就加1啊.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
static变量的初始化只进行一次 ,运算结果可以长时间保留
auto变量的赋初值可以进行多次,每次调用f初值都为0(auto b=0; )
auto变量的赋初值可以进行多次,每次调用f初值都为0(auto b=0; )
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有变化,每执行一次F子程序,C就会加1.因为静态变量会自动记录下你计算后的值,并给当前的变量.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询