为了账号安全,请及时绑定邮箱和手机立即绑定

115. 若有如下函数定义:

115. 若有如下函数定义:

C
包小龙虾 2018-08-05 21:43:32
115. 若有如下函数定义:int fun(){static int k=0;return ++k;}以下程序段运行后屏幕输出为( )。int i;for(i=1;i<=5;i++) fun();printf("%d",fun());A. 0B. 1C. 5D. 6求会的大神详细解析下,谢谢
查看完整描述

2 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

printf 打印的是什么? 是 fun() 的值!  这是什么意思?

这里的 fun() 就是个表达式,这是“函数调用表达式”。还记得吧,每个表达式都有值,“调用表达式”的值就是函数的返回值

当然,fun 函数需要被调用运行才会得到返回值,所以 printf("%d",fun()); 这一语句执行期间,fun 函数确实被调用了,它返回的值被 printf 打印了出来。


我们来看看 fun 函数中到底执行了什么:

int fun()
{
    static int k = 0;
    return ++k;
}

k 并不是一个普通的函数局部变量,它被 static 修饰了。这样的变量在函数第一次被调用时被初始化,而后函数再次调用时,该变量会保留有前次函数调用时的值(并不会被再次初始化)

函数返回 ++k,我相信对自增你已经很清楚了,这里会返回 ++k 表达式的值,也就是 k 自增后的值。


在 printf 语句之前,for 循环已经调用过 5 次 fun 了。也就是在 for 语句中 fun 被首次调用,后又被调用了 4 次。

在首次调用 fun 时,k 被初始化为 0,然后返回了 ++k 的值,不过返回值并没有被使用,所以我们不管它。但是自增的副作用确实发生了,所以第一次调用 fun 之后,其中 k 的值自增为 1。

for 中第二次调用 fun 时,因为 k 是 static 修饰的,所以 k 不会被再次初始化为 0,而是保留了上次的值 1。这样最后 return 语句再次让 k 自增为 2。

第三次调用时同理,最后 k 的值变为 3。

for 中的最后一次调用,也就是第 5 次调用 fun 之后,k 的值变为 5。

后面才是 printf 语句,这里又调用了一次 fun。此时 k 为 5,所以 ++k 表达式的值为 6,这样 fun 最后返回 6。  printf 就打印出 fun 的返回值 6。


查看完整回答
1 反对 回复 2018-08-13
  • 2 回答
  • 0 关注
  • 993 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信