是怎么运算出来的呢?

img


int k=4,m=1
执行func(4,1)

m,i 是静态变量,相当于全局变量 m=0,i=2
i = i+m+1=2+0+1=3;
m=i+a+b=3+4+1=8;
返回8,main函数中printf显示的是8

第二次执行func(4,1)
m,i 是静态变量,相当于全局变量,静态变量的初始化只执行一次,所以这里的m=0,i=2不再执行。
m和i的值是上一次func函数中计算后的值: m=8,i=3

i = i+m+1=3+8+1=12;
m=i+a+b=12+4+1=17;
返回8,main函数中printf显示的是17

关键在与 static变量,它类似一个全局变量,但是作用域只在这个函数中;
只会在第一次调用这个函数的时候初始化,之后不会再初始化
它会记录每次计算的值