C语言读程序写结果 谢谢

来源:百度知道 编辑:UC知道 时间:2024/04/29 01:50:51
#include<stdio.h>
main()
{int a=3,b=2,c=1;
c-=++b;b*=a+c;
{int b=5,c=12;
c/=b*2;a-=c;printf("%d,%d,%d,",a,b,c);
a+=--c;
}
printf("%d,%d,%d\n",a,b,c);
}

我感觉答案是2,5,1,3,3,-2
但正确答案是2,5,1,2,3,-2
请高手解释下 谢谢
第二个printf是在花括号外的
所以不是应该输出花括号外a的值也就是3嘛
为什么a还是等于括号里的值2呢?花括号里的局部变量a不是应该释放了嘛?

为什么a还是等于括号里的值2呢?花括号里的局部变量a不是应该释放了嘛?
因为在花括号里没有重新定义的a,所以a不是局部变量,不存在释放,所以a的值会一直沿续下来,在花括号里改变a的值会影响到花括号外.

a=2;c=1;
a+=--c;
c=0;
所以a等于a=a+0=2;
最后输出2

括号内c=1
a+=--c;
这句时先执行--c=0;
然后a+=0
a的值不变,仍为2
括号里只定义了b,c
a没有定义,延续的是全局变量的值
所以在里面改和外面改动的结果是一样的