为什么我输出20?

时间:2015-07-28 18:30:43

标签: c

为什么我在输出中得到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

2 个答案:

答案 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只是一项任务。