小麦诗词:c语言问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 18:08:54
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",a,b,c);
为什么第二个b=3呢

c-=++b 这时 b=3,c=-2
b*=a+c 这时 a=3,c=-2,b=3

而下面这段程序的作用域只在大括号之类,这样
第二个printf语句中的b还是开始的b
{
int b=5,c=12;
c/=b*2;
a-=c;
printf("%d,%d,%d,",a,b,c);
a+=--c;
}

你按顺序执行,当执行到c-=++b;这一句时,b的值就由2变成3了。,然而后面第二层括号里定义的b是局部变量,出了括号就没有用了,不能改变第二个b的值,所以第二个b=3

你是说第二次输出的B为什么等于3吧?

因为你大括号里的生命周期只在括号结束后就完结了,所以里边你申请的B先输出它是5,就像函数一样,他们括号结束后就被注销了,而第二此输出的B是最开始的计算结果,它只有在main函数结束后才会被注销。