为什么我在输出中得到20,因为自动变量有块范围?
#include <stdio.h>
int main(void) {
int a=0;
{
int a=10;
printf("%d",a);
a++;
{
a=20;
}
{
printf(" %d",a);
int a=30; {a++;}
printf(" %d",a++);
}
printf(" %d",a++);
}
printf(" %d",a);
return 0;
}
输出:
10 20 31 20 0
答案 0 :(得分:1)
a
语句在其自己的块范围内,但是在该范围内未定义a
,因此它在下一个最外层范围内查找a
的定义。在这里,它找到初始化为10的{{1}},并将其设置为20.
答案 1 :(得分:0)
您没有在内部块中声明新变量,只是引用了之前声明的变量。如果您将代码更改为:
int main(void) {
int a=0;
{
int a=10;
printf("%d",a);
a++;
{
int a=20;
}
{
printf(" %d",a);
int a=30; {a++;}
printf(" %d",a++);
}
printf(" %d",a++);
}
printf(" %d",a);
return 0;
}
然后你会得到你期望的输出。 int a = 20
是一个声明,a = 20
只是一项任务。