include <stdio.h>int func(int x){int y=0;static int z=3;x=z++, y++;return(x);}void main(){int a=2,i,b;for(i=0;i<2;i++)b=func(a++);printf("%d\n",b);}
4 回答
慕沐林林
TA贡献2016条经验 获得超9个赞
include <stdio.h>
int func(int x) //这个参数传得没有意义,传入后没有引用其值
{int y=0;
static int z=3;
x=z++, y++; //','操作符,取最后一个表达式的结果为最终结果,即y++,由于y是局部变量,每次进入该函数y都会被初始化成0,又y++是先引用后自加,所以赋给x的是y的初始值0
return(x); //返回始终为0
}
void main()
{int a=2,i,b;
for(i=0;i<2;i++) //循环3次,a每次加1
b=func(a++); //前面说了,func的参数传入无意义,所以返回值与a的值无关,由于func始终返回为0,所以b始终为0
printf("%d\n",b); //打印“0”
}
侃侃无极
TA贡献2051条经验 获得超10个赞
有两个知识点需要知道:
1、静态变量与普通变量无二,区别在于静态变量始终占有内存,进出函数不会被改变,不消失。只在同一文件中能调用,其他文件无法调用。
在你的程序中,b的值取决于函数func中的z值,第一次循环进去函数func返回3,静态变量自加变为4,第二次循环返回4.
千万里不及你
TA贡献1784条经验 获得超9个赞
static变量z只初始化一次,所以for循环两次,第一次b等于z等于3,同时z++变为4,第二次循环时b等于4,同时z++变成5。由于,显示的是最后一次的b,所以最终结果为4
- 4 回答
- 0 关注
- 821 浏览
添加回答
举报
0/150
提交
取消