C语言中static变量的赋值问题
fun(inta){intb=0;staticintc=3;b++;c++;return(a+b+c);}main(){inti,a=5;for(i=0;i<3;i++)...
fun(int a)
{ int b=0;static int c=3;
b++;
c++;
return(a+b+c);}
main()
{ int i,a=5;
for(i=0;i<3;i++)
printf(" %d %d ",i,fun(a));
printf("\n"); }
这个题目里面那个static变量c的值是怎么变化的呢?
不是说静态局部变量的值在下次进入该函数时储存单元的值是不变的么?
给的答案里面
第一次调用c初值为3,结束时值为4
第二次调用c初值为4,结束时值为5
第三次调用c初值为5,结束时值为6
怎么会这样子呢?
c的值不是应该始终是3么?每次调用函数的时候c变量不是被赋值为3吗?
那么全局变量呢?
它不是只能是静态变量么?
全局变量为什么又可以在初始化以后再次赋值呢 展开
{ int b=0;static int c=3;
b++;
c++;
return(a+b+c);}
main()
{ int i,a=5;
for(i=0;i<3;i++)
printf(" %d %d ",i,fun(a));
printf("\n"); }
这个题目里面那个static变量c的值是怎么变化的呢?
不是说静态局部变量的值在下次进入该函数时储存单元的值是不变的么?
给的答案里面
第一次调用c初值为3,结束时值为4
第二次调用c初值为4,结束时值为5
第三次调用c初值为5,结束时值为6
怎么会这样子呢?
c的值不是应该始终是3么?每次调用函数的时候c变量不是被赋值为3吗?
那么全局变量呢?
它不是只能是静态变量么?
全局变量为什么又可以在初始化以后再次赋值呢 展开
5个回答
展开全部
static int a = 0; // 运行期时初始化一次, 下次再调用时, 不进行初始化工作如下:
printf(“%d”,a);
a++;
}
int main()
{
staticLocalVar(); // 第一次调用, 输出a=0
staticLocalVar(); // 第二次调用, 记忆了第一次退出时的值, 输出a=1
return 0;
}
扩展资料
1、static对全局变量的修饰,可以认为是限制了只能是本文件引用此变量。有的程序是由好多.c文件构成。彼此可以互相引用变量,但加入static修饰之后,只能被本文件中函数引用此变量。
2、static对栈变量的修饰,可以认为栈变量的生命周期延长到程序执行结束时。一般来说,栈变量的生命周期由OS管理,在退栈的过程中,栈变量的生命也就结束。
3、但加入static修饰之后,变量已经不再存储在栈中,而是和全局变量一起存储。同时,离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。
2016-02-19
展开全部
static变量与普通变量的区别就在于此
每次调用fun()函数,
函数开始时,初始化普通变量、分配内存,函数结束后,普通变量所占用的内存就被释放
而对于static变量,只是第一次调用时会初始化,函数体结束之后,static变量占用的内存会被保留,从而变量的值不会发生变化,下次调用该函数,也不会重新初始化,而是保留上次的值
每次调用fun()函数,
函数开始时,初始化普通变量、分配内存,函数结束后,普通变量所占用的内存就被释放
而对于static变量,只是第一次调用时会初始化,函数体结束之后,static变量占用的内存会被保留,从而变量的值不会发生变化,下次调用该函数,也不会重新初始化,而是保留上次的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是赋值初始值,那么在程序运行初始就已经初始化了。
和全局变量是一样的。
但体现出来作用是在第一次调用。
至于后续赋值,随便什么时候都可以
想赋值的时候就赋值咯。
和全局变量是一样的。
但体现出来作用是在第一次调用。
至于后续赋值,随便什么时候都可以
想赋值的时候就赋值咯。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵,这就是静态变量的功能啊,静态变量只被初始化1次,所以不管几次调用,它都不会再执行int c=3这行啦。而c的值就是你之前运算的结果
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
static定义的变量只有第一次被赋值,这之后会自然使用之前留下来的值了,不会每次都按3初始化的。:-)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询