我在case语句之外声明了一个变量。但是,如果我在一个案例中打印它的值,它会说0.有人可以解释一下吗?
混淆是 为什么声明部分被采用 (int b,否则,未定义变量的编译错误)和 为什么不初始化?
我无法通过标记为重复的问题得到答案,因此发布了帖子。
main()
{
int a=1;
switch(a)
{
int b = 6;
case 1:
{
printf("b is %d\n",b);
}
break;
default:printf("b is %d in default\n",a);
break;
}
return 0;
}
答案 0 :(得分:1)
变量init可以转换为
int b;
b = 6;
该案例的行为类似于在遇到开关时跳过的goto。因此,您直接将b = 6
行跳到printf
,这会使b
的值未定义。
答案 1 :(得分:1)
将case
语句视为goto。
switch(test){
printf("This code is skipped!\n");
case 1:
break;
default:
break;
}
测试变量时,跳转到匹配的情况,忽略switch
和case
之间的任何内容。在您的示例中,完全跳过了变量定义。
您正在打印未初始化变量的值。