a,b没有值?后面调用k,m不是直接给了k,m分别为4和1吗?为什么结果不是4 和1而是8和17

 

解析如下: 

#include <stdio.h>
func(int a,int b)
{
    static int m = 0,i = 2;
    i += m+1;
    m = i+a+b;
    return m;
}

void main()
{
    int k =4,m=1,p;
    p = func(k,m);
    //func 后传入 4,1   注意 m和i是静态变量,只初始化一次,生存周期随main函数。
    // i += m +1 等价于 i = i + m + 1; 此时 i值为2+0+1=3
    // m 值为 3+4+1 = 8  返回8   p的值为8
    printf("%d",p);   //打印8

    p = func(k,m); 
    //第二次调用,因为 m 和 i 是静态变量, 上一次的i值为 3,m 值为 8
    //传入4,1 后   i += m + 1 值为  3+8+1 = 12
    //m值为 12 + 4 + 1 = 17  返回17   p的值为17
    printf("%d",p); //打印17
}