c语言,判断程序输出题。printf(“%d#%d#%d#%d#“,x,*y,z,w);printf(“%d#%d#%d#%d#“,x,y,z,w);

以下代码段的输出是:

int x, 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) {

     int x, 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#

首先要知道,全局变量和静态变量在未初始化的情况下,编译器会根据类型自动赋值0或'\0'。

所以static int x 的值为0

然后将这个静态变量x的地址和y=1传入函数。

函数中,静态变量w同理,会等于0。

而*和++均为单目运算符,且结合方向为自右向左,并且若有b=a++,其逻辑为先赋值再++,故这里仅为取y的值但不赋给谁,再让y指针向后移一个int单位。

x自增,变为2。

若有b=++a,其逻辑为先++再赋值,故这里为指针前移一个int单位(又回来了),其指向地址的值为0,再与x相加得2。

所以函数打印2#0#0#2#。

函数执行完后,回到main函数,x未做修改,仍为0。而yzw均为前面赋值的1,故再追加打印0#1#1#1#

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会不了一点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值