以下代码段的输出是________。
intx,y,z,w;
void p(int *y, int x){
static int w;
*y++;
x++;
w = x+*--y;
printf("%d#%d#%d#%d#", x, *y, z, w);
}
int main(void){
intx,y,z,w;
x=y=z=w=1;
do{
static int x;
p(&x, y);
printf("%d#%d#%d#%d#", x, y, z, w);
} while(0);
return 0;
}
输出2#0#0#2#0#1#1#1#
你拿去编译我也会 可是我自己算的答案是#2#2#0#3#2#1#1#1#,
怎么理解?
这个题目主要是全局变量,局部变量,静态变量的区别咯
第二个*y,初始值为0,经过*y++和*--y,最后得到值为0,所以*y为0
第三个z,是全局变量,为初始化值0,不是局部变量的z =1;所以z为0
第四个,w = x+*--y;其中x =2,*--y等于0,所以w =2
第五个static int x;是静态局部变量,作用域为do while中,以为*y为0,所以静态变量的内存地址的数值为0
后面三个是局部变量的值为1
第二个*y,初始值为0,经过*y++和*--y,最后得到值为0,所以*y为0
初始值不是1吗?为什么是0?还有*y++这个怎么理解,有指针的。。。
初始值哪里是1了,初始值是static int x;静态变量,声明时系统直接赋值为0。
*y++你可以把(*y)当成一个整体看,y是内存地址,(*y)是一个数值