C语言静态变量问题?

函数定义intfunc(){staticintm=0;returnm++;}则下列程序段输出为(?)inti;for(i=1;i<=4;i++)func();printf... 函数定义
int func( )
{ static int m=0;
return m++;
}
则下列程序段输出为(?)
int i;
for(i=1;i<=4;i++)
func( );
printf("%d",func( ));
题目答案是4,但是求解为什么是4?
展开
 我来答
xtk163123
2021-10-11
知道答主
回答量:22
采纳率:25%
帮助的人:4.7万
展开全部
  • static变量

  • static声明的变量为“静态局部变量”,变量内容具有持久性。

      该局部变量的值在函数调用结束之后不会消失,而仍然保留其原值。即它所占用的存储单元不释放,在下一次调用该函数时,其局部变量的值仍然存在,也就是上一次函数调用结束时的值。

  • return m++

    前置++是用之前就加1,用的人拿到的一定是新值;后置++是用完之后才加1,用的人拿到的是旧值.

    m++中的加法确实做了,而且是在return之前做的,只不过返回值早就保存好了,而且是m在执行加法之前的值

  • 综述:

    第1次:返回0,m变成1

    第2次:返回1,m变成2

    第3次:返回2,m变成3

    第4次:返回3,m变成4

    第5次:返回4,m变成5

望采纳

追问
它这个for(i=1;i<=4;i++)中不是只输出4次吗?输出i的值分别是1、2、3、4,第5次是哪里来的?
追答

我上面的图是为了解释原理而已。


根据你的代码

仔细看:func函数和打印函数没有用大括号括起来


前面for循环是执行4次了但是不打印,

而且是返回:0 1 2 3,好好看回答


printf("%d",func( ));这个语句执行第5次,返回4.并打印

WYZZWB2011407d2e
高能答主

2021-10-11 · 最想被夸「你懂的真多」
知道大有可为答主
回答量:5.2万
采纳率:77%
帮助的人:7522万
展开全部
除了范围之外,变量还有存活期,在这一期间变量能够保持它们的值。在存活期内一直保持模块级变量和公用变量的值,但是对于Dim声明的局部变量以及声明局部变量的过程,只有在过程执行时这些局部变量才存在。
通常,当一个过程执行完毕,它的局部变量的值就已经不存在,而且变量所占据的内存也被释放。当下一次执行这个过程时,其所有局部变量将被重新初始化。 §可以把局部变量定义成静态的,从而保留变量的值。在过程内部用关键字Static声明一个或几个变量,其用法和Dim语句完全一样:
Static 变量 As 类型
为了使过程中所有的局部变量为静态变量,可以在过程头的起始处加上关键字Static。这就使过程中的所有局部变量都变为静态,无论它们是用Static、Dim或Private声明的还是隐式声明的。可以在Static放在任何Sub或Function过程头的前面,包括事件过程和声明为Private的过程。
希望我能帮助你解疑释惑。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CodeBlove
2021-10-11 · TA获得超过3363个赞
知道小有建树答主
回答量:936
采纳率:79%
帮助的人:239万
展开全部
这不是很明显嘛,func先被调用4次(i从1到4,循环调用4次),打印输出再调用一次,m++后加操作,因此要少算一次,也就是4+1-1=4.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式