#include <stdio.h>
int main()
{
int a = 10;
goto inside;
{
int a = 20;
{
inside:
printf("%d",a);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么它打印输出为 0,而不是 10?即使它寻找最近的范围,即。int a = 20没有明确执行。内存只包含int a = 10;那么为什么这里是0?
在printf调用时,名称a指的是该名称的第二个变量,即初始化为 的变量20。外部a,即初始化为 的那个10,是隐藏的。没有理由printf打印10。
该goto语句跳过了 inner 的初始化a,因此它永远不会被初始化为20。为它分配了空间,但它的值是任意垃圾。的0印刷存在是内的内容a。它可以是任何东西。