a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

C 轉移表/轉換表的深入分析

2020-01-26 16:05:57
字體:
來源:轉載
供稿:網友
個人實現例子:
復制代碼 代碼如下:

#include <stdio.h>
#include <string.h>
#define M 4
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
int div(int a, int b);
int (*oper_func[])(int, int) = {
 add, sub, mul, div
};
char oper_sequence[M][10] = {
 "add", "sub", "mul", "div"
};
int main()
{
 char oper[10];
 int seq;
 int a,b;
 int result;
 int i;
 printf("Operator:");
 scanf("%s",oper);
 printf("a:");
 scanf("%d",&a);
 printf("b:");
 scanf("%d",&b);
 for(i=0; i<M; i++)
 {
  if(strncmp(oper_sequence[i], oper, 3) == 0)
   seq = i;
 }
 result = oper_func[seq](a, b);
 printf("result is %d/n", result);
 return 0;
}
int add(int a, int b)
{
 return a+b;
}
int sub(int a, int b)
{
 return a-b;
}
int mul(int a, int b)
{
 return a*b;
}
int div(int a, int b)
{
 return a/b;
}

<<C和指針>>原文:
轉換表(jump table)
轉移表最好用個例子來解釋。下面的代碼段取自一個程序,它用于實現一個袖珍式計算器。程序的其他部分已經讀入兩個數(op1和op2)和一個操作符(oper)。下面的代碼對操作符進行測試,最后決定調用哪個函數。
switch(oper)
{
  case ADD:   result=add(op1,op2);break;
  case SUB:    result=sub(op1,op2);break;
  case MUL:    result=mul(op1,op2);break;
  case DIV:     result=div(op1,op2);break;
  ......
}
對于一個新奇的具有上百個操作符的計算器,這條switch語句將會非常之長。為什么要調用函數來執行這些操作呢?把具體操作和選擇操作的代碼分開是一種 良好的設計方案。更為復雜的操作將肯定以獨立的函數來實現,因為它們的長度可能很長。但即使是簡單的操作也可能具有副作用,例如保存一個常量值用于以后的 操作。
為了使用switch語句,表示操作符的代碼必須是整數。如果它們是從零開始連續的整數,我們可以使用轉換表來實現相同的任務。轉換表就是一個函數指針數組。
創建一個轉換表需要兩個步驟。首先,聲明并初始化一個函數指針數組。唯一需要留心之處就是確保這些函數的原型出現在這個數組的聲明之前。
double add(double,double);
double sub(double,double);
double mul(double,double);
double div(double,double);
double (*oper_func[])(double,double)={add,sub,mul,div,...};
初始化列表中各個函數名的正確順序取決于程序中用于表示每個操作符的整型代碼。這個例子假定ADD是0,SUB是1,MUL是2,接下去以此類推。
第二個步驟是用下面這條語句替換前面整條switch語句!
result=oper_func[oper](op1,op2);
oper從數組中選擇正確的函數指針,而函數調用操作符將執行這個函數。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 亚洲一区国产视频 | 女国产精品视频一区二区三区 | 两性免费视频 | 在线有码 | 欧美日韩精品一区二区三区四区 | 久久久久久国产精品免费免费 | 欧美视频精品 | 精品国产乱码简爱久久久久久 | 久久不色 | 久久一本| 欧美一区二区视频 | 国产精品久久久久久久久久久免费看 | 美女一区二区三区四区 | 日韩精品1区2区3区 欧美高清不卡 | 五月激情综合 | 久久人人看| 久久艹在线观看 | 久久久久久亚洲精品 | 国产精品一区二区三区不卡 | 欧美一区二区在线看 | 久久午夜影院 | 精品国产乱码久久久久久丨区2区 | 曰本人一级毛片免费完整视频 | 精品国产乱码久久久久久丨区2区 | 羞羞小视频 | 伊人91| 亚洲男人的天堂在线播放 | 精品久久久久久久久久久 | 国产精品中文字幕一区二区三区 | 国产精品久久久久久久久久99 | 资源av | 国产精品国产 | www.伊人网 | 国产精品美女av | www视频在线观看 | 欧美视频网站 | 国产福利在线播放麻豆 | 一区在线不卡 | 亚洲www啪成人一区二区 | 成人毛片免费在线观看 | 欧美成人精品h版在线观看 日韩激情影院 |