#include<stdio.h>
int func(int,int);
int main()
{
int k=4,m=1,p1,p2;
p1=func(k,m);
p2=func(k,m);
printf("%d %d\n",p1,p2);
return 0;
}
int func(int a,int b)
{
static int m=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
在func函数中,static int m=0,i=2;,m和i 是静态变量,初始化只执行一次,m和i相当于全局变量。
具体如下:
p1=func(4,1)
m=0,i=2,a=4,b=1
i+=m+1 等价于i=i+m+1=2+0+1=3
m=i+a+b=3+4+1=8
return m
p1=m=8
p2=func(4,1)
m=8,i=3(上一次func函数执行后的值),a=4,b=1
i+=m+1 等价于i=i+m+1=3+8+1=12
m=i+a+b=12+4+1=17
return m
p2=m=17
结果是8,17.首先从主函数main执行到p1,p1为定义的函数,接下来进入函数func,a=k=4,b=m=1,m此时为0,i=i+m+1=3,m=i+a+b=3+4+1=8,因为这个函数返回值是m,所以结果是m=8;再回到主函数部分,接下来第二次执行这个函数func,此时,a=k=4,b=m=1,m因上次结果得到赋值=8,i因上次赋值=3,i=3+8+1=12,m=12+4+1=17,两次执行函数返回结果为8,17
8 17