if(a)
else if(0)else if(1)else if(2)
..
.
.
.else if(n)
switch(a)
case 0:case 1:case 2:
..
.
.
case n:哪种效率高?执行顺序如何?
第一种好象是从头到脚找
不过我记得第二种也是从头到脚找,不过好像第二种好点?

解决方案 »

  1.   

    其实是一样的。只不过用CASE语句容易读些。
      

  2.   

    我觉得第二种好一些 
    switch...case应该也是从头开始的 下面这段程序能证明
    但是单单的把它理解为和if ...elseif一样也不对 下面这段程序也能看出来
    the c++ programming language上有一道题
    我把题中的函数send()随便写进了一段程序中 你可以编译一下试试
    #include <iostream>void send (int *to,int *from,int count)
    {
      int n=(count+7)/8;
      switch (count%8) 
      {
      case 0:   do {  *to++=*from++;
      case 7:         *to++=*from++;
      case 6:         *to++=*from++;
      case 5:         *to++=*from++;
      case 4:         *to++=*from++;
      case 3:         *to++=*from++;
      case 2:         *to++=*from++;
      case 1:         *to++=*from++;
            }  while (--n>0);
      }
    }
    void main(void) {
    int a[10],b[10]={1,2,3,4,5,6,7,8,9,0};
    send(a,b,5);
    for (int i=1;i<=10;i++) {
    std::cout<<"a["<<i<<"]="<<a[i-1];
    }
    }
    按照这个switch...case中写的 我觉得case x:看起来更象一个label而不象if这样带有语意
    因为这段程序是编译无误逻辑也无误的 说明"do {"被编译器看见了 比如第一次count%8为5 那么将从case 5开始顺序执行 但是此时do { } while 循环体确实再起作用 虽然case 0没有被执行但是编译器还是看到了do {并对它做了编译 如果是if ... else if那就没戏了
      

  3.   

    顺便说一下 send()这个函数从第二个指针指的对象向第一个指针所指的对象传值 第三个参数指定传几个值
      

  4.   

    据说分支大于2时switch效率高.
      

  5.   

    你如果确实想知道答案
    写这段程序
    然后TRACE CPU窗口的汇编就行了
    干看是看不出来的
    据说更是没影的事情