尤其是c=a+b++,int fun(int a){ int c;static int b=3;c=a+b++;return c;}void main(void){ int x=2 ,y;y=fun(x);printf("y=%d",y);y=fun(x+3);printf("y=%d",y);}
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 02:10:01
尤其是c=a+b++,int fun(int a){ int c;static int b=3;c=a+b++;return c;}void main(void){ int x=2 ,y;y=fun(x);printf("y=%d",y);y=fun(x+3);printf("y=%d",y);}
尤其是c=a+b++,
int fun(int a)
{ int c;
static int b=3;
c=a+b++;
return c;
}
void main(void)
{ int x=2 ,y;
y=fun(x);printf("y=%d",y);
y=fun(x+3);printf("y=%d",y);
}
尤其是c=a+b++,int fun(int a){ int c;static int b=3;c=a+b++;return c;}void main(void){ int x=2 ,y;y=fun(x);printf("y=%d",y);y=fun(x+3);printf("y=%d",y);}
static int b=3;这句编译时处理,可认为第一次调用fun时才执行,且b存放在静态存储区,fun函数调用完后b的内存不被释放.也就是说,第一次调用fun时b初始化为3,此后在调用fun时,static int b=3;这一句已经不存在了,因为它是编译时处理的,此时的b值应该使用之前的存储值,因为b的内存直到整个程序结束后才释放.
所以:
y=fun(x);printf("y=%d",y);
首次调用fun,b=3;c=a+b++;执行后,b等于4,c等于5(因为b++的值为3,后缀++)
y=5
y=fun(x+3);printf("y=%d",y);
第二次调用fun,b=4;
c=a+b++;执行后,b等于5,c等于9
y=9
即最终打印:
y=5y=9
开始,
1,x=2;
2,调用fun(x):
{
a=2;
b=3;
接下来是“c=a+b++”:
"b++"表示b在当前表达式结束后加1;
即上式相当于:
c=a+b;
...
全部展开
开始,
1,x=2;
2,调用fun(x):
{
a=2;
b=3;
接下来是“c=a+b++”:
"b++"表示b在当前表达式结束后加1;
即上式相当于:
c=a+b;
b=b+1;
所以最终返回的是5;
此时b=4;
}
3,输出“y=5”
4,调用fun(x+3),
因为b的类型为static int ,所以此时不在对b进行初始化,即b=4,所以返回9;
5,输出“y=9”
收起