一道C语言和static有关的题

有以下程序:
#include <stdio.h>
fun(int x, int y)
{static int m=0, i=2;
i+=m+1; m=i+x+y; return m;
}
main()
{int j=1, m=1, k;
k=fun(j,m); printf("%d,",k);
k=fun(j,m); printf("%d\n",k);
}
执行后的输出结果是( A )。
A) 5, 11
B) 5, 5
C) 11, 11
D) 11, 5


 
i+=m+1含义为:i=i+m+1.

第一次调用子程序fun时,赋值得:x=j=1,y=m=1.而子程序里m=0,i=2.所以

运行i+=m+1得 i=3; 运行m=i+x+y得 m=5. 同时返回值m=5,即把5赋值给fun,即k=5,输出k=5.在这次调用中x、y值没改变,所以fun(j,m)中的j、m值不变。

第二次调用fun时,赋值还得:x=j=1,y=m=1。而此时,因m、i为static型变量,即静态变量,它们保持上次运行结果即m=5,i=3,通过运算的m=11.





要考计算机二级的同学刷题的时候遇到这道题,问我。我居然也懵了。欸,我这专业课学得也太辣鸡了……

扎心了~~~



  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值