switch-case变量定义

今天写switch-case语句时
例如

int a =2;
switch(a){
 case 1:
 	int b=1;
 	System.out.println(b);
 	break;
 case 2:
 	b=2;// 使用 int b =2;就会报错 Variable 'b' is already defined in the scope
 	System.out.println(b);
 	break;
}

为什么case1定义的b在case2中不用定义

作者:刘城
链接:https://www.zhihu.com/question/23051685/answer/23463267
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你的理解有一些误区,变量的声明和定义的作用是在静态域,与是否执行到没有关系。定
义变量并不存在执行动作。为什么这个容易误解呢,因为c语言switch语句设计的比较悲剧,
每个case部分是没有独立的作用域的。要理解它,一种方法是把它当作goto来看。 比如这
个程序就是:
#include <iostream>
using namespace std;
int main() {
    bool b = false;
    goto case_false;
case_true:
    int ival;
    goto switch_end;
case_false:
    ival = 3;
    cout << ival << endl;
switch_end:
    return 0;
}
再说一下动态分配的事情,先说清楚分配不是有一条指令教int xxx,执行到这里的时候会
分配空间,这个是个描述,而不是个命令,只是说明我需要空间,编译器会保证在相应的
作用域之中这个变量的空间是被分配了。大部分编译期实现会选择在函数开始把所有局部
变量的空间都分配好(只要改一下堆栈指针就好)。最后补充一下,你的声明还可以是一
个类的对象,那么这时候这个声明的语句就很可能是一个命令了:调用相应的构造函数。
这种情况下,编译器就会告诉你跳过了该做的事情,不能这么写了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中的switch-case语句是一种流程控制结构,它提供了一种方便的方式来根据不同的情况执行不同的代码块。它的基本语法如下所示: ``` switch (expression) { case value1: // code to be executed if expression matches value1 break; case value2: // code to be executed if expression matches value2 break; case value3: // code to be executed if expression matches value3 break; ... default: // code to be executed if none of the above cases match break; } ``` 在这个语法中,expression是一个变量或表达式,它的值将与每个case语句后面的value进行比较。如果expression的值与某个case语句后面的value相匹配,则执行该case语句后面的代码块。如果没有任何一个case语句匹配,那么就会执行default后面的代码块。每个case语句必须以一个break语句结束,以避免执行下一个case语句。 下面是一个简单的示例,演示了如何使用switch-case语句: ``` int day = 4; string dayName; switch (day) { case 1: dayName = "Monday"; break; case 2: dayName = "Tuesday"; break; case 3: dayName = "Wednesday"; break; case 4: dayName = "Thursday"; break; case 5: dayName = "Friday"; break; case 6: dayName = "Saturday"; break; case 7: dayName = "Sunday"; break; default: dayName = "Invalid day"; break; } Console.WriteLine("Today is {0}", dayName); ``` 在这个例子中,我们定义了一个整数变量day,并将其设置为4。然后我们使用switch-case语句来根据day的值设置一个字符串变量dayName,它将包含该天的名称。由于day的值为4,所以我们将执行第四个case语句,并将dayName设置为“Thursday”。最后我们将结果输出到控制台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值