以下代码段的输出是________.

以下代码段的输出是________。
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;
}

第1个回答  2014-12-08

输出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)是一个数值

本回答被提问者和网友采纳