局部变量值的变化第一段C代码:C/C++ codeint a5main( ) { int b6,c7printf(%d\t%d\t%d\n,a,b,c){
局部变量值的变化
第一段C代码:
C/C++ codeint a=5;main( ) { int b=6,c=7; printf("%d\t%d\t%d\n",a,b,c); { int a=9,b=8,c=8; printf("%d\t%d\t%d\n",a,b,c); [color=#008000]{ c=10; printf("%d\t%d\t%d\n", a,b,c); }[/color] [color=#FF0000]printf("%d\t%d\t%d\n",a,b,c);[/color] } printf("%d\t%d\t%d\n",a,b,c); }
为什么倒数第2行输出 9 8 10
我的理解是输出 9 8 8 因为c=10的作用范围只存在于绿色标示范围的复合语句中,倒数第2行输出的C应该是c=8
第二段代码:
C/C++ codeint a=5;main( ) { int b=6,c=7; printf("%d\t%d\t%d\n",a,b,c); { int a=9,b=8; printf("%d\t%d\t%d\n",a,b,c); [color=#FF0000] { c=10; printf("%d\t%d\t%d\n", a,b,c); }[/color] printf("%d\t%d\t%d\n",a,b,c); } printf("%d\t%d\t%d\n",a,b,c); }
为什么最后2行输出是: 9 8 10
5 6 10
还是不懂局部变量c的作用范围,我的理解是输出:
9 8 7
5 6 7
不是已经跳出了复合语句(红色部分)吗?那么变量c的值就应该是外层的同名变量c呀?
问题很简单,还请不要见笑。
[解决办法]这是一个变量的作用域的问题。c是一个局部变量,其作用域是从它开始定义的地方开始到函数(主函数)的结束。你中间对其修改了值c = 10;所以,它的输出时9 8 10.
[解决办法]int a=5;
main( )
{
int b=6,c=7;
printf("%d\t%d\t%d\n",a,b,c);
{
int a=9,b=8,c=8; 局部变量c这里定义
printf("%d\t%d\t%d\n",a,b,c);
{
c=10; 这里赋值了
printf("%d\t%d\t%d\n", a,b,c);
}
printf("%d\t%d\t%d\n",a,b,c);
局部变量c到这里结束
}
printf("%d\t%d\t%d\n",a,b,c);
}
[解决办法]把那个 c=10; ,改成 int c=10;再试试,区分定义和赋值的概念