2 回答
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。
- 2 回答
- 0 关注
- 993 浏览
添加回答
举报