C语言谜题一个困惑...
6、请说出下面的程序输出是多少?并解释为什么?(注意,该程序并不会输出"bis20")#includeintmain(){inta=1;switch(a){intb=20...
6、请说出下面的程序输出是多少?并解释为什么?(注意,该程序并不会输出 "b is 20")
#include
int main()
{
int a=1;
switch(a)
{
int b=20;
case 1:
printf("b is %d\n",b);
break;
default:
printf("b is %d\n",b);
break;
}
return 0;
}
参考答案:该程序在编译时,可能会出现一条warning: unreachable code at beginning of switch statement。我们以为进入switch后,变量b会被初始化,其实并不然,因为switch-case语句会把变量b的初始化直接就跳过了。所以,程序会输出一个随机的内存值
请问, 为何会跳过初始化语句? 是switch的约定么? 展开
#include
int main()
{
int a=1;
switch(a)
{
int b=20;
case 1:
printf("b is %d\n",b);
break;
default:
printf("b is %d\n",b);
break;
}
return 0;
}
参考答案:该程序在编译时,可能会出现一条warning: unreachable code at beginning of switch statement。我们以为进入switch后,变量b会被初始化,其实并不然,因为switch-case语句会把变量b的初始化直接就跳过了。所以,程序会输出一个随机的内存值
请问, 为何会跳过初始化语句? 是switch的约定么? 展开
6个回答
展开全部
a=1满足了switch(a)中的case 1,所以直接跳到case 1
去运行,而没有执行定义语句int b=20;
去运行,而没有执行定义语句int b=20;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个warning: unreachable code at beginning of switch statement。已经告诉你了,代码里的int b=20;是不会被编译的。也就是说编译出来的代码根本就不存在初始化变量b的操作。建议学习C/C++时结合编译原理一起学吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int main()
{
int a=1;
int b=20; //switch内部不支持变量定义语句
switch (a)
{
case 1:
printf("b is %d\n",b);
break;
default:
printf("b is %d\n",b);
break;
}
return 0;
}
int main()
{
int a=1;
int b=20; //switch内部不支持变量定义语句
switch (a)
{
case 1:
printf("b is %d\n",b);
break;
default:
printf("b is %d\n",b);
break;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
switch内部实际是一个goto结构。在a=1进入switch的时候,就直接跳到了case 1:,b肯定就不会初始化啦~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询