C语言的一个程序问题

来源:百度知道 编辑:UC知道 时间:2024/05/06 01:12:18
看不明白这段代码。下面的函数定义部分不是很清楚,对于m,i那部分有点模糊了,请老师帮忙讲解,谢谢
#include
int func(int a,int b);
main( )
{ int k=4,m=1,p;
p=fun(k,m);printf(“%d,”,p);
p=fun(k,m);printf(“%d\n”,p);
}
func(int a,int b)
{static int m=0,i=2;
i+=m+1;
m=i+a+b;
return m;
}
答案:8 17
那定义K=4 有什么用吗?

我也知道是基础,当初没用心学,这不现在就在补吗?C语言我知道是不能丢下的东西

k=4;没有特殊的意义,就是把值传给p函数啊

#include<stdio.h>
int func(int a,int b); //子程序的声明
main( )
{ int k=4,m=1,p;
p=fun(k,m);printf(“%d,”,p); //调用函数p
调用时,把当前的值(实参)传递给函数里的参数(行参).在这里:
k=4,m=1程序转向了函数p,去看下面的函数吧>>>>>>>
p=fun(k,m);printf(“%d\n”,p);
}
func(int a,int b) //第一次,a=4,b=1, 第二次a=4,b=1
{static int m=0,i=2; //static是声明局部变量,它的意思是每次计算的m,i的值不会被再次调用函数而复原,其值是计算到多少,就保留多少
i+=m+1; //(1)次i=i+m+1就是i=3了 (2)次i=i+m+1=3+8+1=12了i=12
m=i+a+b; //(1)次m=3+4+1=8了 (2)次m=12+4+1=17
return m; //(1)次返回m=8,注意了,兄弟,下次调用p函数时,i=3,m=8
(2)次 m=17返回了
}
懂了不?

static操作符后面声明的变量其生命周期是全局的,而且其定义语句即static int m=0,i=2;只运行一次,因此之后再调用func时,该语句不运行。
所以第一次执行func:
static int m=0,i=2;------m为0,i为2
i+=m+1;-------------------m为0,i为3
m=i+a+b;------------------m为8,i为3
返回m的值给p,打印结果为8
第二次执行func
static int m=0,i=2;------不执行,m仍为8,i为3
i+=m+1;-------------------m为8,i为12