首先输出结果是 8,17
第二,你上面这个程序编译不了的,有2个问题
1),函数的返回值类型没写;
2),func()函数体放在了main()函数后面且没再main()函数中声明。
第三,注释该程序:
#include
void main() //修改1:增加了void
{
int k=4,m=1,p; //定义变量k,m,p
int func(int,int); //修改2:声明函数func
p=func(k,m); //以k,m为参数,调用函数func,返回值赋给p
printf("%d, ",p); //输出p的值;
p=func(k,m); //以k,m为参数,第二次调用函数func,返回值赋给p
printf("%d\n",p); //再输出p的值;
}
int func(int a,int b)
{
static int m=0,i=2; //定义静态变量 m,i,初值分别为0,2;
i+=m+1; // i = i+m+1;第一次:i=2+0+1=3;第二次:i=3+8+1=12;
m=i+a+b; //m = i+a+b;第一次:m=3+4+1=8;第二次:m=12+4+1=17;
return m; //将m作为返回值 第一次返回:8; 第二次返回:17;
}
第四、说明一下“静态变量”
在被调用的函数体内,如果声明了某些变量(非静态),那么这些变量仅在该函数被执行期间起作用,也就意味着当函数的一次调用结束的时候,这些变量所在的内存空间都被释放掉了。如果再一次调用该函数,它将重新声明定义这些变量。
而如果某个变量被声明为静态变量(static)则这个变量在该函数第一次被调用时创建(分配其内存空间),当函数调用结束时,这个变量的内存空间保持不变,并不释放。这样如果该函数第二次被调用,则该变量将继续保有上一次执行时的值参与运算。
请把问题写在“详细提问”上,题目能写的字数是有限的