由switch选择结构理解局部变量

2008-07-28 15:54:23 来源:不详 作者:佚名 点击:
函数体内部自定义变量,称为局部变量,存储于栈(stack)中,由编译器自动分配和释放,局部变量的生存期(或者说作用域)是当前函数内部,使用时必须初始化,否则其值将不定

函数体内部自定义变量,称为局部变量,存储于栈( stack )中,由编译器自动分配和释放,局部变量的生存期(或者说作用域)是当前函数内部,使用时必须初始化,否则其值将不定。以前对局部变量的定义也就是这么多,而且也就那么在用。近期碰到如下一个问题:

void func( void )  

{  

   int x = 2;  

   switch ( x )  

   {  

         int m =0;        //initialization skipped by case0,case1,case2,default  

   case 0 :  

         int i = 0;         //initialization skipped by case1,case2,default  

         { int j = 1; }    // OK, initialized in enclosing block  

         break;  

   case 1 :  

         break;  

   case 2:  

         break;  

   default:  

         int k = 1;               // OK, initialization not skipped  

   }  

}  

遇到这个问题,网上的解答很多,很多人觉得 switch 内不能定义局部变量,这个明显是不对的。因为我把代码改成以下形式后就完全可以用了。

void func( void )  

{  

   int x = 2;  

   switch ( x )  

   {  

         int m;  

         m = 0;                    //without execute;  

   case 0:  

         int i;  

         i = 0;  

         { int j = 1; }    // OK, initialized in enclosing block  

         printf("%d     %d\n", m, i);  

         break;  

   case 1:  

         i = 1;  

         printf("%d     %d\n", m, i);  

         break;  

   case 2:  

9 7 3 1 2 4 8 :


logo

本类最新行业评测技巧教程学院
本类热点本日本周本月
本类推荐本日本周本月

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203