鱼C论坛

 找回密码
 立即注册
查看: 750|回复: 2

[已解决]为什么等于这个

[复制链接]
发表于 2021-1-14 21:13:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <Stdio.h>
int c=1;
main()
{static int a=5;int b=6;
printf("a=%d b=%d c=%d\n",a,b,c);
func();
printf("a=%d,b=%d,c=%d\n",a,b,c);
func();
}
func()
{ static int a=4;int b=10;
a+=2;
c+=10;
b+=c;
printf("a=%d,b=%d,c=%d\n",a,b,c);
}

a=5,b=6,c=1
a=6,b=21,c=11
a=5,b=6,c=11
a=,8,b=31,c=21
为什么第四行的b等于31
最佳答案
2021-1-14 21:29:49
本帖最后由 风过无痕1989 于 2021-1-14 21:31 编辑

func() 函数不带参数,所以主程序的的不带入函数。c 是全局变量,a 是静态局部变量
第一次调用函数的初值是:a = 4, b = 10, c = 1
a+=2;      a = a + 2 = 4 + 2 = 6
c+=10;    c = c + 10 = 1 + 10 = 11
b+=c;      b = b + c = 10 + 11 = 21
第二次调用函数的初值是:a = 6, b = 10, c = 11
a+=2;      a = a + 2 = 6 + 2 = 8
c+=10;    c = c + 10 = 11 + 10 = 21
b+=c;      b = b + c = 10 + 21 = 31
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-14 21:23:03 | 显示全部楼层
本帖最后由 昨非 于 2021-1-14 21:39 编辑

func里面(b)10+(c)21不是31吗?
顺着前面几步,前面的都理解的话,这一步是一个道理

第二行你理解了,那个21就是:
c+=10得到c=11,然后b+=c,也就是10+11得到的

第四行和第二行相比,差别就在于:
全局变量c多加了个10,其他条件(局部变量b)是相同的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-14 21:29:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风过无痕1989 于 2021-1-14 21:31 编辑

func() 函数不带参数,所以主程序的的不带入函数。c 是全局变量,a 是静态局部变量
第一次调用函数的初值是:a = 4, b = 10, c = 1
a+=2;      a = a + 2 = 4 + 2 = 6
c+=10;    c = c + 10 = 1 + 10 = 11
b+=c;      b = b + c = 10 + 11 = 21
第二次调用函数的初值是:a = 6, b = 10, c = 11
a+=2;      a = a + 2 = 6 + 2 = 8
c+=10;    c = c + 10 = 11 + 10 = 21
b+=c;      b = b + c = 10 + 21 = 31
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 04:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表