c - 不中断切换和 i++ 与++i

标签 c switch-statement

我不明白为什么这两个有不同的输出

有两个简单的C程序

int main()
{
    int i;
    for (i = 0;i<3; i++)
            {
              switch (i++)
              {
               case 0:
               {
                 printf("zero");
               }
               case 1:
               {
                printf("one");
               }

               case 2:
               {
               printf("two");
               break;
               }

              default:
               {               
                printf("end");
               }                
        }
     }
}

这给出了这个输出:零一二二

在这种情况下,当变量 i 的值从 0 变为 1 时切换后?

int main()
{
    int i;
    for (i = 0;i<3; i++)
     {
         switch (++i)
         {
            case 0:
            {
                printf("zero");
            }
            case 1:
            {
                printf("one");
            }

            case 2:
            {
                printf("two");
                break;
            }

            default:
            {             
                printf("end");
            }   

        }
     }
}  

这给出了这个输出:一个两端

最佳答案

switch (i++)
     {
     }

等同于:

int j=i;
i++;
switch (j)
    {
    }

同时

switch (++i)
     {
     }

等同于:

i++;
switch (i)
    {
    }

关于c - 不中断切换和 i++ 与++i,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244818/

相关文章:

c - C中的 "Real Types"和 "Arithmetic Types"有什么区别?

c - 如何以优化方式加载更大的文本文件到缓冲区--c程序

c++ - 开关盒 : declaration-with-initialization & declaration-and-then-assignment

C语言: Switch cases weird example not ending with ";" nor "break"

.NET:字符串键的切换与字典

c - 在整数数组中查找最大/最小出现次数

c - GDB 在 shell 生成时卡住

c++ - 头文件可以在主类中运行。这怎么可能?

javascript - 性能: Switch vs Polymorphism

c - 在用户不退出的情况下,在 C 中查找两个数字的总和、差等