阿尼key 发表于 2021-1-14 21:13:18

为什么等于这个

#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: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)是相同的

风过无痕1989 发表于 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
页: [1]
查看完整版本: 为什么等于这个