c语言,这个运行结果是多少,怎么来的?

 我来答
紫薇参星
科技发烧友

2021-04-28 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3494万
展开全部

因为变量c是静态局部变量,所以其生存期与程序相同,每次调用后其值将长期保留(不会被内存释放),其初始值是当程序运行时第一次赋的值,以后调用不再赋初始值(再次进入f函数时,第二句赋值语句不执行),

因此,第一次调用f函数时c为5(a=c++是先赋值后自增),第二次调用f函数时c为6,又因为逗号运算符的优先级低于赋值运算符,所以变量a被赋值为变量c(而不是变量b),并被返回给k,因此第一次调用f后k为5,第二次调用f后k为6,

程序打印的是第二次调用f后k的结果,所以输出6.

细雨在微笑
2021-04-28 · TA获得超过203个赞
知道小有建树答主
回答量:358
采纳率:45%
帮助的人:76.4万
展开全部

这是个有趣的问题, 程序代码本身很多混淆,冗余。

这里容易造成困惑的关键点在于 逗号表达式和 赋值运算符 谁的优先级高。

即:a= c++,b++;   如果理解为 a=c++;  b++; 还是理解为 a =(c++,b++);

逗号表达式优先级最低,这里应理解为 a=c++;  b++;

函数 f 的 参数多余, b多余,简化后,函数等效下图:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
brain39
2021-04-27 · TA获得超过6096个赞
知道大有可为答主
回答量:6365
采纳率:81%
帮助的人:36.1万
展开全部
f()里面a的值被赋于c的值,为5,与原来进来是多少没有关系,f()的返回值只与里面的c有关,总是返回5。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
参观西湖
2021-04-28 · 古籍有很多,写出来一起欣赏。
参观西湖
采纳数:919 获赞数:2307

向TA提问 私信TA
展开全部
6
main里面,调用f函数两次,
第一次,f函数里面的c初始化为5,a=c++,会导致c自增为6
第二次,f函数里的c由于是静态变量,所以不执行初始化语句,a=c++, a的值是6,c自增为7,最后返回a,
返回结果回到main函数赋值给k,k的结果就是6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
itunes0004
2021-04-28 · TA获得超过4045个赞
知道大有可为答主
回答量:2685
采纳率:69%
帮助的人:511万
展开全部
k的输出值是 6
for 循环会执行两次,第一次调用 f(a=4) 第二次调用 f(a=5).
第一次调用时,f(a=4) 返回值a是c执行++之前的结果,返回5,c++后变成6.
第二次调用时,f(a=5)此时c已经是6了。同样返回值a是c执行++之前的结果,返回6.
返回值6被赋值给k,因此输出 k = 6.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式