为什么第二个p跟第一个不一样?经过函数调用后m会变吗?

图片说明

因为static中定义的变量,相当于全局的。也就是第二次调用这个函数,会“记忆”之前的结果
第一次调用
i=2
然后i = i + (m+1)=2+0+1=3
然后m=i+a+b=3+4+3=10
所以10
第二次调用,m i不是0 2而是10 3
所以i = i + (m + 1) = 3 +10 + 1 = 14
m = i+a+b=14+3+4=21
所以21

如果去掉static,那么两次调用结果就一样了,因为每次调用,m i都会被初始化为0 2,而忘记之前的修改。

问题解决的话,请点下采纳。(包括之前的几个回答,谢谢)

p不一样是因为在func函数中用了静态static定义了整形变量m和i,m和i在func函数执行后会发生变化,也就是说第一次执行开始时,m=0,i=2,返回10,func第二次开始时,m和i保留第一次执行的变化最开始时m=10,i=3,返回21,所以第一个输出10,第二个输出21,经过函数调用后,mian主函数中的m是不会变的,但是func函数中的m值会变因为是用static定义的。