结果为什么会这样,最后一个b为什么不等于m

img

a=10,b=m
a=5,b=n
a=10,b=n

因为你只有一个b变量。在{}语句块内只中对外面的b重新赋值,并不是在{}语句块内再声明一个局部的b变量。
要在{}语句块内再声明一个局部的b变量,应该是:
{
char b;
b = 'n';
}

第一个 int a的有效范围是整个main,
第二个 int a的有效范围是中间的花括号{}之内,
b因为是在{}外面定义的,因此整个main里都有效,在{}中改变了b的值,后面所有的b的值都改变了。

在main(){}定义的int a;char b 它们的作用域在main(){}范围内,而第8行至第12行{}内定义的int a 作用域就在12-18行{}内。